我在 JavaPairRDD<Integer, List<String>>
中有一个很大的列表我想做一个 flatMap 来获取列表条目的所有可能组合,这样我就可以得到 JavaPairRDD<Integer, Tuple2<String,String>>
.基本上如果我有类似的东西
(1, ["A", "B", "C"])
我想得到:
(1, <"A","B">)
(1, <"A", "C">)
(1, <"B", "C")
问题在于大列表,因为我所做的是通过对输入列表进行嵌套循环来创建一个大的 Tuple2 对象列表。有时这个列表不适合内存。我找到了这个,但不确定如何在 Java 中实现它: Spark FlatMap function for huge lists
最佳答案
您可能想要flatMap
列表,然后在过滤相等值之前加入RDD
本身:
JavaPairRDD<Integer, List<String>> original = // ...
JavaPairRDD<Integer, String> flattened = original.flatMapValues(identity());
JavaPairRDD<Integer, Tuple2<String, String>> joined = flattened.join(flattened);
JavaPairRDD<Integer, Tuple2<String, String>> filtered =
joined.filter(new Function<Tuple2<Integer, Tuple2<String, String>>, Boolean> () {
@Override
public Boolean call(Tuple2<Integer, Tuple2<String, String>> kv) throws Exception {
return kv._2()._1().equals(kv._2()._2());
}
});
关于java - 大列表 FlatMap Java Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574154/