-1

输入文件

(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 是全新的。它是逗号分隔的。

  • 到目前为止,我已经到了这里,但我无法正确解析该行。

    val inputfile = sc.textFile("/home/input/input.txt") 
    
    val keyval = inputfile.map(x=>(x(0),x(1)))
    
    .reduceByKey{case (x, y) => (x._1+y._1, math.max(x._2,y._2))}
    
    keyval.maxBy { case (key, value) => value }
    
    keyval.saveAsTextFile("/home/out/word")
    
  • 我收到这些错误 -

    <console>:26: error: value _1 is not a member of Char
    
    keyval.reduceByKey{case (x, y) => (x._1+y._1, 
    math.max(x._2,y._2))}
                                        ^
    <console>:26: error: value _1 is not a member of Char
    keyval.reduceByKey{case (x, y) => (x._1+y._1,math.max(x._2,y._2))}
                                             ^
    <console>:26: error: value _2 is not a member of Char
    keyval.reduceByKey{case (x, y) => (x._1+y._1,math.max(x._2,y._2))}
                                                            ^
    <console>:26: error: value _2 is not a member of Char
    keyval.reduceByKey{case (x, y) => (x._1+y._1,math.max(x._2,y._2))}
                                                                 ^
    <console>:26: error: value maxBy is not a member of 
    org.apache.spark.rdd.RDD[(Char, Char)]
    keyval.maxBy { case (key, value) => value }
    
4

1 回答 1

0

sc.textFile将文件逐行读取为 [String] ,因此当您执行时inputfile.map(x=>(x(0),x(1))),每行的第一个和第二个字符都用作tuples。并reduceByKey使用元组的第一个元素进行分组,第二个值 aChar被发送到内部reducyByKey,并且由于第二个元素不是元组而只是 a Char,因此您无法使用元素获取元素._1._2因此您有后续错误

错误:值 _1 不是 Char 的成员

错误:值 _2 不是 Char 的成员

最后一个错误很明显

错误:值 maxBy 不是

因为您不能对 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

我希望答案有帮助

于 2018-07-29T06:20:55.280 回答