scala - 如何组合 RDD 集中的值?
问题描述
如果我有一个RDD[(Int, Array[Boolean])]
,我怎么能组合每组的值?
例如
如果我RDD
是:
(1, Array(true, false, true)) (2, Array(true, true, false))
我想要的结果是:
(1, Array(true, true, true)) (2, Array(true, true, true))
解决方案
如果我理解正确,您希望 RDD 中的所有记录都具有相同的值,该值是数组每个索引上按位或运算的结果数组。
在这种情况下,您可以从reduce
计算这个单个值的操作开始,然后将原始 RDD 映射到一个新的 RDD 中,并为所有记录提供这个新值:
val newVal = rdd.values.reduce((a1, a2) => a1.zip(a2).map { case (b1, b2) => b1 | b2 })
val result = rdd.mapValues(_ => newVal)
result.mapValues(_.toList).foreach(println)
// prints:
// (1,List(true, true, true))
// (2,List(true, true, true))
请注意,此解决方案忽略了诸如空输入或数组大小不等的边缘情况。
推荐阅读
- google-api - 对 Google Ads API 的所有请求的内部服务器错误 500
- java - 非事务性 jmsTemplate 等待会话结束
- sql - 泛化查询以获取给定范围的所有数据
- hive - 如何在 AWS Athena/Presto 中实现 Hive 的按位左移?
- html - 两个不同字体大小的内衬按钮?
- regex - 如何限制这个正则表达式只允许 200 个字符?
- kubernetes - openshift 中的 Prometheus 警报管理器配置
- angular - Angular 6 项目中来自three.js 错误的VRMLLoader
- vhdl - 我把扰频器和解扰器模块分别放在vhdl中,但解扰器的结果与扰频器的输入不一样
- pandas - 在预处理时,我有大量具有 nan 值的列!用“零”或“N”替换所有 nan 列的任何可能方法