我有一个包含(Key,Value)的JavaPairRDD,我想按Keys分组,并使“第二列”成为列出该键的所有值的列表。我当前正在使用该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
最后,我想组合值以获得键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并使用addAll
arraylist上的方法合并列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句