根据此链接:https://github.com/amplab/training/blob/ampcamp6/machine-learning/scala/solution/MovieLensALS.scala
我不明白有什么意义:
val numUsers = ratings.map(_._2.user).distinct.count
val numMovies = ratings.map(_._2.product).distinct.count
_._2.[user|product]
,这是什么意思?
答案 0 :(得分:1)
评级是元组的集合:(时间戳%10,评级(userId,movieId,评级))。 _._ 2.user中的第一个下划线指的是map函数正在处理的当前元素。所以第一个下划线现在指的是一个元组(一对值)。对于一对元组t,你可以用速记符号表示它的第一和第二个元素:t._1& t._2所以_._ 2正在选择map函数当前正在处理的元组的第二个元素。
val ratings = sc.textFile(movieLensHomeDir + "/ratings.dat").map { line =>
val fields = line.split("::")
// format: (timestamp % 10, Rating(userId, movieId, rating))
(fields(3).toLong % 10, Rating(fields(0).toInt, fields(1).toInt, fields(2).toDouble))
}
答案 1 :(得分:1)
即访问元组元素:以下示例可能更好地解释它。
val xs = List(
(1, "Foo"),
(2, "Bar")
)
xs.map(_._1) // => List(1,2)
xs.map(_._2) // => List("Foo", "Bar")
// An equivalent way to write this
xs.map(e => e._1)
xs.map(e => e._2)
// Perhaps a better way is
xs.collect {case (a, b) => a} // => List(1,2)
xs.collect {case (a, b) => b} // => List("Foo", "Bar")