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
方法合并列表。
我有一个包含 (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
方法合并列表。