java - 大列表 FlatMap Java Spark

标签 java list apache-spark

我在 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/

相关文章:

java - 如何回滚第一个事务而不回滚新事务?

python - 将 Pandas 列的列表拆分为多列

java - 构建一个在 Linux 服务器上运行的 jar

Scala Map 作为 Spark ML 模型的参数

java - Java中使用正则表达式匹配句子

java - 物理游戏的内存高效AI对象

C# 不使用额外内存的对象顺序列表

python - 计数器列表 python 2.7

Alpine linux docker 上的 apache-spark 启动错误

java - Java中隐藏透明JScrollPane的边框