JavaPairRDD 将key-value转换为key-list

JavaPairRDD convert key-value into key-list

我有一个包含 (Key, Value) 的 JavaPairRDD,我想按键对其进行分组,并使“第二列”成为一个列表,其中包含该键的所有值。我目前正在使用 groupby() 函数,该函数正确执行键聚合,但将我的值转换为 Long 的 Iterable。这是,

Key1 Iterable<Long>
Key2 Iterable<Long>
...

有什么方法可以强制此函数使用 Longs 列表而不是 Iterable 对象?

Key1 List<Long>
Key2 List<Long>
...

我阅读了一些关于名为 combineByKey() 的函数的内容,但我认为这不是一个用例。可能我需要使用 reduceByKey 但我没有看到它。它应该是这样的:

myRDD.reduceByKey((a,b) -> new ArrayList<Long>()) //and add b to a 

最后,我想把values组合起来得到一个Key n, List<Long> RDD。 谢谢你的时间。

您可以尝试这样的操作:

JavaPairRDD <String, List<long>> keyValuePairs = rdd.map(t -> {
    return new Tuple2(t._1, Arrays.asList(new long[]{t._2}));
}).reduceByKey((a, b) -> {
    a.addAll(b);
    return a;
});

首先,您映射以将值转换为长整型列表。然后 reduceByKey 并使用 arraylist 上的 addAll 方法合并列表。