Ich versuche den folgenden Code, der eine Nummer zu jeder Zeile in einer RDD hinzufügt und eine Liste von RDDs mit PySpark zurückgibt.PySpark Auswertung
from pyspark.context import SparkContext
file = "file:///home/sree/code/scrap/sample.txt"
sc = SparkContext('local', 'TestApp')
data = sc.textFile(file)
splits = [data.map(lambda p : int(p) + i) for i in range(4)]
print splits[0].collect()
print splits[1].collect()
print splits[2].collect()
Der Inhalt der Eingabedatei (sample.txt) ist:
1
2
3
I eine Ausgabe wie dies erwartet wurde (die Zahlen in der RDD mit 0 Hinzufügen, 1, 2 bzw.):
[1,2,3]
[2,3,4]
[3,4,5]
während die tatsächliche Ausgabe war:
[4, 5, 6]
[4, 5, 6]
[4, 5, 6]
bedeutet, dass das Verständnis nur den Wert 3 für die Variable i verwendet hat, unabhängig von (4).
Warum passiert dieses Verhalten?
ich versucht hatte, vorbei ‚p‘ auf eine einfache externe Funktion und zu einer inneren Funktion (wie die in der Antwort) genannt durch ein Lambda, für Versuch und Irrtum Zwecke. bemerkte das richtige Verhalten, wenn ich das tat: http://pastebin.com/z7E7wGKx Vielen Dank für die Antwort mit dem Grund, warum dies passiert. – srjit
erwähnenswert, dass dies in fast jeder Sprache mit closures/lambdas passiert, auch C# –