我有2个配对的RDD,我使用相同的密钥将它们连接在一起,我现在想要使用值部分中的2列添加新的计算列。新加入的RDD类型是:
RDD[((String, Int), Iterable[((String, DateTime, Int,Int), (String, DateTime, String, String))])]
我想在新的RDD中添加另一个字段,显示2个DateTime
字段之间的差异。
我该怎么做?
答案 0 :(得分:1)
你应该能够使用map
将2元组扩展为3元组,大致如下:
joined.map{ case (key, values) =>
val delta = computeDelta(values)
(key, values, delta)
}
或者,更简洁:
joined.map{ case (k, vs) => (k, vs, computeDelta(vs)) }
然后,您的computeDelta
函数只能提取(String, DateTime, Int,Int)
类型的第一个和第二个值,从每个值中获取第二个项目(DateTime
)并使用{{1}计算增量值功能很方便。
如果您希望输出RDD仍然是配对的RDD,那么您需要将新的delta字段包装到元组中,大致如下:
DateTime
将保留原始的PairedRDD键,并为您提供类型joined.mapValues{ values =>
val delta = computeDelta(values)
(values, delta)
}
(假设您正在计算(Iterable[(String, DateTime, Int,Int)], Long)
类型的增量)