Scala / Spark - 聚合RDD

时间:2015-08-10 10:42:48

标签: scala apache-spark

我想知道如何做到以下几点:

假设我有一个包含(用户名,年龄,movieBought)的RDD用于许多用户名,有些行可以使用相同的用户名和年龄但是不同的movieBought。

如何删除重复的行并将其转换为(用户名,年龄,movieBought1,movieBought2 ......)?

亲切的问候

2 个答案:

答案 0 :(得分:1)

val grouped = rdd.groupBy(x => (x._1, x._2)).map(x => (x._1._1, x._1._2, x._2.map(_._3)))

val results = grouped.collect.toList

更新(如果每个元组也有多个电影项目):

val grouped = rdd.groupBy(x => (x._1, x._2)).map(x => (x._1._1, x._1._2, x._2.map(m => (m._3, m._4))))

val results = grouped.collect.toList

答案 1 :(得分:0)

我会建议收集并列出,但ka4eli打败了我。

我猜你也可以使用groupBy / groupByKey然后减少/ reduceByKey操作。这个ofc的缺点是结果(movie1,movie2,movie3 ..)被连接成1个字符串(而不是List结构,这使得难以访问它)。

val group = rdd.map(x=>((x.name,x.age),x.movie))).groupBy(_._1)
val result =  group.map(x=>(x._1._1,x._1._2,x._2.map(y=>y._2).reduce(_+","+_)