scala-没有足够的参数用于方法计数

kxkpmulp  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(628)

我对scala和sparkrdd编程相当陌生。我使用的数据集是一个csv文件,其中包含电影列表(每部电影一行)及其关联的用户分级(以逗号分隔的分级列表)。csv中的每一列代表一个不同的用户以及他/她对电影的评价。因此,用户1对每部电影的评分在左侧第2列中表示:
样本输入:
蜘蛛侠,1,2,3,3
睡眠医生,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]])(睡眠博士,[[4,0],[4,1],[1,2],-1,3],[1,4]])
在第三行,获取count()将抛出一个错误。对于每一部电影(行),我试图得到公共元素的数量。在上面的例子中,[-1,2]显然是蜘蛛侠和睡眠博士共享的一个共同元素。

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号线目标输出如下:
(蜘蛛侠,睡眠博士,1)-->在这两部电影中,有一个共同的条目。
有人能告诉我吗?

u3r8eeie

u3r8eeie1#

错误信息似乎很清楚: count 接受一个参数,但在调用中,传递的是一个空参数列表,即零个参数。你需要把一个论点传给我 count .

mqkwyuun

mqkwyuun2#

要获取集合中的元素数,请使用 length 或者 size . count() 返回满足某些附加条件的元素数。
或者你可以通过使用 count 要计算第一个集合中第二个集合包含的元素,请执行以下操作:

movieRating1._2.count(movieRating2._2.contains(_))

相关问题