我想知道如何做到以下几点:
假设我有一个包含(用户名,年龄,movieBought)的RDD用于许多用户名,有些行可以使用相同的用户名和年龄但是不同的movieBought。
如何删除重复的行并将其转换为(用户名,年龄,movieBought1,movieBought2 ......)?
亲切的问候
答案 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(_+","+_)