减少火花scala中的RDD

时间:2016-07-31 14:19:22

标签: scala apache-spark reduce

我有一个RDD(会话ID,会话开始时间,会话长度)。我需要通过会话ID减少此RDD,然后生成相应会话开始时间和长度的数组。有人能指出我如何在scala中编写代码吗?

所以我需要从RDD转换[(会话ID,会话开始时间,会话长度)] 到RDD [(会话ID,Seq [(会话开始时间,会话长度)]) 我怎么能这样做?

1 个答案:

答案 0 :(得分:-1)

也许groupBy可能会有所帮助(虽然它不是很推荐,因为它可能很慢):

val a = sc.parallelize(Seq(("a", 0, 0), ("b", 1, 1), ("a", 2, 2)))
val grouped = a.groupBy{ case(sessionID, startTime, length) => sessionID }

在这种情况下,grouped将是RDD[(String, Iterable[(String, Int, Int)]。然后,您可以轻松映射它以获得所需的格式。

另外,您可以使用map + groupByKey

val grouped = a.map { 
  case(sessionID, startTime, length) => (sessionID, (startTime, length)) 
}.groupByKey