对Spark MLlib中一个例子某些部分的误解

Misunderstanding of some parts of an example in Spark MLlib

我按照这个 example 使用 Spark MLLib 创建一个简单的个性化演示推荐器。

我对这几行代码中_._2.user_._2.product的意思有点误解:

val numUsers = ratings.map(_._2.user).distinct.count
val numMovies = ratings.map(_._2.product).distinct.count

2 表示什么?此外,userproduct 似乎是第一次出现在这一行中。那么,它们如何链接到 userIdmovieId

_1_2、... _2 是用于在 Scala 中提取元组元素的方法。这些在这里没有特殊的 Spark 特定上下文。 userproductRating 的字段。由于 ratingsRDD[(Long, Rating)] 创建如下:

val ratings = sc.textFile(...).map { line =>
  ...
  (fields(3).toLong % 10, // Long
    Rating(fields(0).toInt, fields(1).toInt, fields(2).toDouble)) // Rating
}

你应该有一张完整的照片。

ratings 的类型为 RDD[(Int, Rating)]。所以 ratings.map 接受一个带有 (Int, Rating) 参数的函数,而 _.something 中的 _ 代表这个参数。 _2 returns元组的第二个字段(Rating),userproductRating的声明中声明。