我有一个RDD(会话ID,会话开始时间,会话长度)。我需要通过会话ID减少此RDD,然后生成相应会话开始时间和长度的数组。有人能指出我如何在scala中编写代码吗?
所以我需要从RDD转换[(会话ID,会话开始时间,会话长度)] 到RDD [(会话ID,Seq [(会话开始时间,会话长度)]) 我怎么能这样做?
答案 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