Ich habe einen Schlüssel Wert Daten, nennen wir das x. Es besteht aus einem Schlüssel und einem Paar Volumen und Gewicht. Es sieht so ausreduceByKey gibt jedes Mal einen anderen Wert zurück
[('t1', (2, 0.8)),
('t1', (3, 0.1)),
('t1', (4, 0.3)),
('t2', (3, 0.8)),
('t2', (10, 0.3))]
Ich möchte den gewichteten Volumenwert für jedes t1 und t2 berechnen. Das heißt I
2 * 0,8 + 3 * 0,1 + 4 · 0,3 für t1
3 * 0,8 + 10 * 0.3 für T2
berechnen I
x.map(lambda (x, (y, z)): (x, y*z)).reduceByKey(lambda x,y: x+y).collect()
tun würde ich holen Sie sich die richtige Anzahl
[('t2', 5.4), ('t1', 3.1)]
Meine Frage ist, wenn ich den ursprünglichen Eingang x, und führen Sie einen solchen reduceByKey Betrieb als
x.reduceByKey(lambda (f1, w1), (f2, w2): (f1 * w1 + f2 * w2, w1 + w2)).collect()
Ich hatte gehofft,
[('t2', 5.4, 1.1), ('t1', 3.1, 1.2)]
jedoch zu bekommen, erhalte ich jedes Mal unterschiedliche Ergebnisse ich die reduceByKey Operation auszuführen:
[('t2', (5.4, 1.1)), ('t1', (3.38, 1.2000000000000002))]
[('t2', (5.4, 1.1)), ('t1', (2.2, 1.2000000000000002))]
[('t2', (5.4, 1.1)), ('t1', (2.91, 1.2))]
Was bin ich aus dem reduceByKey Missverständnis ?
ich bin so DUUUUUH. danke @Pushkr – user2773013