给定 <user, movie, rating> 我如何使用 scala 为每个用户打印出评分最高的电影?

given <user, movie, rating> how can i use scala to print out the highest rated movie for each user?

输入文件

(userid,movie,rating)

1,250,3.0

1,20,3.4

1,90,2

2,30,3.5

2,500,2.3

2,20,3.3

我应该得到用户评分最高的电影。我完全迷路了,我在 hadoop 上有程序 运行 但我是 scala 的新手。它是逗号分隔的。

sc.textFile 逐行读取文件作为 [String] 所以当你这样做时 inputfile.map(x=>(x(0),x(1))) 每行的第一个和第二个字符被用作 tuples。并且 reduceByKey 使用 元组的第一个元素进行分组 并且第二个值 CharreducyByKey 中发送,因为第二个元素不是一个元组,而只是一个Char,你不能使用._1._2获取元素,因此你有后续错误

error: value _1 is not a member of Char

error: value _2 is not a member of Char

最后一个错误很明显

error: value maxBy is not a member of

因为您不能对 Char 元素执行 maxBy。

这是适合您的完整工作解决方案

val inputfile = sc.textFile("/home/mortaza/input/input.txt")

val keyval = inputfile.map(x=>x.split(",")).map(x => (x(0), (x(1), x(2)))).reduceByKey{case (x, y) => if (x._2 <= y._2) y else x}

keyval.map(x => Seq(x._1, x._2._1, x._2._2).mkString(",")).saveAsTextFile("/home/mortaza/out/wordfreq")

应该生成具有以下输出的 csv 输出(使用的输入如问题中给出的那样)

2,30,3.5
1,20,3.4

希望回答对你有帮助