2016-04-14 5 views
0

私はこのexampleに従って、Spark MLLibを使って簡単なパーソナライズされたデモリコメンダを作成しました。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にリンクされていますか?

答えて

2

_1_2 ... _2は、Scalaのタプルの要素を抽出するために使用されるメソッドです。これらには特別なSpark固有のコンテキストはありません。 userおよびproductは、Ratingのフィールドです。 ratingsは、次のように作成したRDD[(Long, Rating)]ですので:

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

あなたは全体像を持っている必要があります。

1

ratingsは、タイプがRDD[(Int, Rating)]です。したがって、ratings.mapは、(Int, Rating)引数を持つ関数をとり、の_は、この引数を表します。 _2は、タプルの第2フィールド(Rating)を返し、とproductは、Ratingの宣言で宣言されています。

関連する問題