java - JavaPairRDD 将键值转换为键列表
问题描述
我有一个包含 (Key, Value) 的 JavaPairRDD,我想按 Keys 对其进行分组,并使“第二列”成为一个列表,其中包含为该键看到的所有值。我目前正在使用该groupby()
函数,该函数正确执行键聚合,但将我的值转换为 Long 的 Iterable。这是,
Key1 Iterable<Long>
Key2 Iterable<Long>
...
有什么方法可以强制此函数使用 Long 列表而不是 Iterable 对象?
Key1 List<Long>
Key2 List<Long>
...
我读了一些关于一个函数的内容,combineByKey()
但我认为这不是一个用例。可能我需要使用 reduceByKey 但我没有看到它。它应该是这样的:
myRDD.reduceByKey((a,b) -> new ArrayList<Long>()) //and add b to a
最后,我想组合值来获得一个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;
});
首先,您映射以将值转换为 long 列表。然后 reduceByKey 并使用addAll
arraylist 上的方法组合列表。
推荐阅读
- angularjs - 如何使用条件表达式为 ng-init 赋值?
- python - 如何使用python格式化表中的列数据?
- angular - 将路由注入路由器出口会引发“布尔表达式不得为空”错误
- css - Add and remove (toggle) collapse class for bootstrap tabs
- php - 服务器端渲染上的 PHP 和 React
- ios - 计算scrollView中的精确缩放
- idl - reading and writing multiple data files in idl
- javascript - 我传递的函数并没有被 azure function app 运行
- angular - Angular - Value lost when call function
- android - 更改背景图像的颜色