Je rencontre des problèmes avec l'exercice de réduction de carte ci-dessous dans Spark avec python. Ma fonction de carte renvoie le RDD suivant.Confus au sujet du comportement de la fonction Réduire dans la carte Réduire
RDD = [(3, ({0: [2], 1: [5], 3: [1]}, l'ensemble ([2]))),
(3, ({0 : [4], 1: [3], 3: [5]}, définir ([1]))),
(1, ({0: [4, 5], 1: [2]}, définir ([3)))]
j'ai écrit une fonction réducteur qui est censé faire des calculs sur tuples avec la même clé (dans l'exemple précédent les deux premières ont key = 3, et la dernière touche est 1)
def Reducer(k, v):
cluster = k[0]
rows = [k[1], v[1]]
g_p = {}
I_p = set()
for g, I in rows:
g_p = CombineStatistics(g_p, g)
I_p = I_p.union(I)
return (cluster, [g_p, I_p])
Le Le problème est que je m'attends à ce que k et v aient toujours la même clé (c.-à-d. k[0]==v[0]
). Mais ce n'est pas le cas avec ce code.
Je travaille sur la plateforme Databricks, et honnêtement c'est un cauchemar qui ne peut pas déboguer, parfois même pas "imprimer". C'est vraiment frustrant de travailler dans cet environnement.
Donc, malgré le fait que dans la fonction de mappeur je retourne (clé, valeur), seul le paramètre de valeurs sera transmis au réducteur? –
Droite. Et dans le résultat, vous ne retournez que des "valeurs" de RDD. – Mariusz