将N个Hashmaps分组为apache Spark JavaPairRDD

时间:2017-02-15 13:32:50

标签: java apache-spark

我必须使用2个HashMap,我将它们分组为单个HashMap

    Map<String, List<String>> map1 = new HashMap<>();
    Map<String, List<String>> map2 = new HashMap<>();

    Map<String, List<String>> result = new HashMap<>();

    map1.keySet().stream().forEach(key -> {
        List<String> val = result.get(key);
        if (val == null) {
            val = new ArrayList<String>();
            result.put(key, val);
        } else {
            val.addAll(map1.get(key));
            result.put(key, val);
        }
    });
    map2.keySet().stream().forEach(key -> {
        List<String> val = result.get(key);
        if (val == null) {
            val = new ArrayList<String>();
            result.put(key, val);
        } else {
            val.addAll(map2.get(key));
            result.put(key, val);
        }
    });

现在我想用apache spark做同样的事情并创建一个JavaPairRDD&gt; 。如果我有N个这样的Hashmaps并将它们分组到JavaPairRD&gt;如何实现呢? ?

1 个答案:

答案 0 :(得分:0)

首先,您需要将每个HashMap转换为JavaPairRDD。 为此,请将HashMap转换为Tuple2数组并使用JavaSparkContext.parrallelizePairs

然后,执行所有union的{​​{1}},这将为您提供一个JavaPairRDD,其中包含您所有地图中的所有条目。

最后,您可以使用RDD对条目进行分组,但这取决于您下一步要做什么,因为groupByKey可能更好。