我对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)-->在这两部电影中,有一个共同的条目。
有人能告诉我吗?
2条答案
按热度按时间u3r8eeie1#
错误信息似乎很清楚:
count
接受一个参数,但在调用中,传递的是一个空参数列表,即零个参数。你需要把一个论点传给我count
.mqkwyuun2#
要获取集合中的元素数,请使用
length
或者size
.count()
返回满足某些附加条件的元素数。或者你可以通过使用
count
要计算第一个集合中第二个集合包含的元素,请执行以下操作: