pyspark: grouby et puis obtenir la valeur maximum de chaque groupe
J'aimerais groupe par une valeur et ensuite trouver la valeur max dans chaque groupe à l'aide de PySpark. J'ai le code suivant mais maintenant, je suis un peu coincé sur la façon d'extraire la valeur de max.
# some file contains tuples ('user', 'item', 'occurrences')
data_file = sc.textData('file:///some_file.txt')
# Create the triplet so I index stuff
data_file = data_file.map(lambda l: l.split()).map(lambda l: (l[0], l[1], float(l[2])))
# Group by the user i.e. r[0]
grouped = data_file.groupBy(lambda r: r[0])
# Here is where I am stuck
group_list = grouped.map(lambda x: (list(x[1]))) #?
Retourne quelque chose comme:
[[(u'u1', u's1', 20), (u'u1', u's2', 5)], [(u'u2', u's3', 5), (u'u2', u's2', 10)]]
Je veux trouver un max 'accident" pour chaque utilisateur. Le résultat final après avoir fait le max entraînerait une EDR qui ressemblait à ceci:
[[(u'u1', u's1', 20)], [(u'u2', u's2', 10)]]
Où seul le max dataset restera pour chacun des utilisateurs dans le fichier. En d'autres termes, je veux changer le valeur de la RDD ne contiennent qu'un seul triplet chaque utilisateurs max occurrences.
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire pour
groupBy
ici. SimplereduceByKey
ferait l'affaire, et la plupart du temps sera plus efficace:(lambda x1, x2: max(x1, x2, key=lambda x: x[-1]))
si possible?max
. Il faut éléments et renvoie le plus grand.key
argument décrit la façon dont les éléments doivent être comparées (ici par le dernier élément).Je pense que j'ai trouvé la solution: