从RDD中的2个值添加新的计算列

时间:2015-04-14 08:43:47

标签: scala datetime apache-spark rdd

我有2个配对的RDD,我使用相同的密钥将它们连接在一起,我现在想要使用值部分中的2列添加新的计算列。新加入的RDD类型是:

RDD[((String, Int), Iterable[((String, DateTime, Int,Int), (String, DateTime, String, String))])]

我想在新的RDD中添加另一个字段,显示2个DateTime字段之间的差异。

我该怎么做?

1 个答案:

答案 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)类型的增量)