【发布时间】:2020-07-01 00:40:10
【问题描述】:
我对 Scala 和 Spark RDD 编程相当陌生。我正在使用的数据集是一个 CSV 文件,其中包含电影列表(每部电影一行)及其相关的用户评分(以逗号分隔的评分列表)。 CSV 中的每一列代表一个不同的用户以及他/她对电影的评分。因此,用户 1 对每部电影的评分显示在左起第 2 列中:
示例输入:
蜘蛛侠,1,2,,3,3
Dr.Sleep, 4,4,,,1
我收到以下错误:
Task4.scala:18: error: not enough arguments for method count: (p: ((Int, Int)) => Boolean)Int.
Unspecified value parameter p.
var moviePairCounts = movieRatings.reduce((movieRating1, movieRating2) => (movieRating1, movieRating2, movieRating1._2.intersect(movieRating2._2).count()
当我执行下面的几行时。对于下面的程序,第二行代码将所有由“,”分隔的值拆分并生成:
( 蜘蛛侠, [[1,0],[2,1],[-1,2],[3,3],[3,4]] ) ( Dr.Sleep, [[4,0],[4,1],[-1,2],[-1,3],[1,4]] )
在第三行,使用 count() 会引发错误。对于每部电影(行),我试图获得共同元素的数量。在上面的例子中,[-1, 2] 显然是蜘蛛侠和 Dr.Sleep 共享的一个共同元素。
val textFile = sc.textFile(args(0))
var movieRatings = textFile.map(line => line.split(","))
.map(movingRatingList => (movingRatingList(0), movingRatingList.drop(1)
.map(ranking => if (ranking.isEmpty) -1 else ranking.toInt).zipWithIndex));
var moviePairCounts = movieRatings.reduce((movieRating1, movieRating2) => (movieRating1, movieRating2, movieRating1._2.intersect(movieRating2._2).count() )).saveAsTextFile(args(1));
我的第3行的目标输出如下:
( Spiderman, Dr.Sleep, 1 ) --> 在这 2 部电影之间,有 1 个共同条目。
有人可以建议吗?
【问题讨论】:
标签: scala apache-spark