2016-04-14 1 views
0

Je suis le example pour créer un simple recommandeur de démonstration personnalisé en utilisant Spark MLLib.Mauvaise compréhension de certaines parties d'un exemple dans Spark MLlib

Je méconnaissent légèrement le sens de _._2.user et _._2.product dans ces lignes de code:

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

Qu'est-ce que 2 INDIQUE? En outre, il semble que user et product apparaissent pour la première fois dans cette ligne. Alors, comment sont-ils liés à userId et movieId?

Répondre

2

_1, _2, sont des méthodes utilisées pour extraire des éléments des tuples dans Scala. Ceux-ci n'ont pas de contexte spécifique Spark particulier ici. user et product sont des champs d'un Rating. Et puisque ratings est RDD[(Long, Rating)] créé comme suit:

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

vous devriez avoir une image complète.

1

ratings a le type RDD[(Int, Rating)]. Donc, ratings.map prend une fonction avec l'argument (Int, Rating), et _ dans _.something représente cet argument. _2 renvoie le deuxième champ du tuple (Rating) et user et product sont déclarés dans la déclaration Rating.