- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaPairRDD
[(A, 0), (B, 0), (C, 0), (D, 0), (E, 0)... ]
JavaPairRDD
[(B, 1), (C, 5), (D, 21)]
输出应该是:
[(A, 0), (B, 1), (C, 5), (D, 21), (E, 0)... ]
要根据第一个 rdd 的键使用第二个 rdd 的值,尝试了 aggregateByKey、union、join(左或右)方法,但没有用。
JavaPairRDD<String, Object> currentRdd = firstRdd.fullOuterJoin(secondRdd).map(stringTuple2Tuple2 -> new Tuple2<String, Long>(stringTuple2Tuple2._1(), stringTuple2Tuple2._2()._2().get()));
我怎样才能像这样组合两个 JavaPairRDD?
最佳答案
如果你希望firstRdd
中的所有键都出现在最终结果中,或者你只是不关心只出现在secondRdd
中的键,你应该使用leftOuterJoin
而不是 fullOuterJoin
leftOuterJoin
解释:
Perform a left outer join of
this
andother
. For each element (k, v) inthis
, the resulting RDD will either contain all pairs (k, (v, Some(w))) for w inother
, or the pair (k, (v, None)) if no elements inother
have key k.
Scala 版本:
val left = sc.parallelize(Array(("A", 0), ("B", 0), ("C", 0),("D", 0),("E", 0)))
val right = sc.parallelize(Array(("B", 1), ("C", 5), ("D", 21)))
val lojoin: RDD[(String, (Int, Option[Int]))] = left.leftOuterJoin(right)
val target = lojoin.mapValues(p => p._2.getOrElse(p._1))
target.foreach(println)
Java 版本:
List<Tuple2<String, Integer>> left = new ArrayList<Tuple2<String, Integer>>();
left.add(new Tuple2<String, Integer>("A", 0));
left.add(new Tuple2<String, Integer>("B", 0));
left.add(new Tuple2<String, Integer>("C", 0));
left.add(new Tuple2<String, Integer>("D", 0));
left.add(new Tuple2<String, Integer>("E", 0));
List<Tuple2<String, Integer>> right = new ArrayList<Tuple2<String, Integer>>();
right.add(new Tuple2<String, Integer>("B", 1));
right.add(new Tuple2<String, Integer>("C", 5));
right.add(new Tuple2<String, Integer>("D", 21));
JavaPairRDD<String, Integer> leftRdd = sc.parallelizePairs(left);
JavaPairRDD<String, Integer> rightRdd = sc.parallelizePairs(right);
JavaPairRDD<String, Tuple2<Integer, Optional<Integer>>> lojRdd = leftRdd.leftOuterJoin(rightRdd);
JavaPairRDD<String, Integer> result = lojRdd.mapValues(new Function<Tuple2<Integer, Optional<Integer>>, Integer>() {
@Override
public Integer call(Tuple2<Integer, Optional<Integer>> v1) throws Exception {
return v1._2().or(v1._1());
}
});
result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
@Override
public void call(Tuple2<String, Integer> t) throws Exception {
System.out.println(t._1() + " " + t._2());
}
});
关于java - 如何通过左键和右值组合两个 JavaPairRDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293267/
我正在尝试执行 JavaPairRDD 和 JavaPairRDD 的 leftOuterJoin> 并且函数签名返回类型是 JavaPairRDD>>> 这里可选的是 com.google.comm
我正在 java 中使用 Spark。我有一个名为 Out1 的 JavaPairRDD 输出1: IDCLIENT|INFO| 1|A| 1|C| 1|H| 5|R|
我有两个 JavaPairRDD。 JavaPairRDD, CustomObject> originalData = ...; JavaPairRDD newData = ...; 在这种情况下,C
JavaPairRDD一个: [(A, 0), (B, 0), (C, 0), (D, 0), (E, 0)... ] JavaPairRDD二: [(B, 1), (C, 5), (D, 21)]
我有一个 Person 类的对象列表。我想将它转换成 JavaPairRDD。 我想创建成对的 Object,BSONObject 类型,以便将它们存储在 MongoDB 中。 最佳答案 我不确定您想
使用 Spark,我的算法的中间步骤之一将输出(Key,Vector)到 PairRDD。此步骤完成后,我想生成所有可能的 Key 的 2 组合,并对它们的值执行进一步的操作,即我想要一个带有 ((K
我正在 Apache Spark 中做一个简单的 WordCount 示例,现在我终于得到了单词数我只想从中过滤唯一的单词。 public class SparkClass { public
我有一个 JavaPaidRDD,我试图根据某些条件迭代并返回元素,而不是 JavaPaidRDD 中的所有记录。 请参阅下面的代码我想要实现的目标。 如果Optional有任何元素Present[i
我有一个名为“rdd”的javaPairRDD,它的元组定义为: 我想使用 max() 函数提取最高的 key ,但它需要一个比较器作为参数,请给我一个如何做到这一点的示例!!! example:
SparkSession.createDataset()只允许List, RDD, or Seq - 但它不支持JavaPairRDD 。 如果我有 JavaPairRDD我想创建一个 Dataset
我正在尝试按值对 RDD 进行排序,如果多个值相等,那么我需要按字典顺序对这些值进行排序。 代码: JavaPairRDD rddToSort = rddMovieReviewReducedByKe
与 apache spark 合作使用 Java .我收到了 JavaPairRDD我想按其值对这个数据集进行排序。不过好像只有sortByKey其中的方法。我如何按 Long 的值对其进行排序类型?
我遇到了 Apache Spark 的以下代码片段: JavaRDD lines = new JavaSparkContext(sparkSession.sparkContext()).textFil
我正在使用 ElasticSearch-Hadoop 库从 ElsticSearch 获取数据。 JavaPairRDD> esRDD = JavaEsSpark.esRDD(sc); 现在我有了 J
我是 Apache Spark 新手。正如标题所示,我有一个 JavaPairRdd我想生成一个JavaRdd键和 JavaPairRdd 的值的串联。这可能吗? 示例: ("1,Nick", "ma
我有一个像这样的RDD: JavaPairRDD 有很多条目,并且某些键重复了很多次。当我应用groupByKey或combineByKey时,它会生成另一个 JavaPairRDD 问题是,对于某些
我有 JavaPairRDD 格式的数据 JavaPairdRDD>> 我尝试使用下面的代码 Encoder>> encoder2 = Encoders.tuple(Encoders.STRING
有一些方法可以将 Dataset 转换为 JavaRDD 。 Dataset dataFrame; JavaRDD data = dataFrame.toJavaRDD(); 是否有任何其他方法可以将
我有一个 JavaRDD>并需要将其转换为 JavaPairRDD .目前我只是通过简单地编写 map 函数来完成它,该函数只按原样返回输入元组。但是不知道有没有更好的方法呢? 最佳答案 JavaPa
我是 Spark 的新手,我想了解这两个 JavaRDD 与 JavaPairRDD 之间的区别,以及如果我将 JavaRDD 转换为 JavaPairRDD,这个操作会有多繁重 JavaRDD> m
我是一名优秀的程序员,十分优秀!