Sto provando il seguente codice che aggiunge un numero a ogni riga in un RDD e restituisce un elenco di RDD utilizzando PySpark.Valutazione PySpark
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()
Il contenuto del file di input (sample.txt) è:
1
2
3
mi aspettavo un output del tipo (aggiungendo i numeri nella RDD con 0, 1, 2 rispettivamente):
[1,2,3]
[2,3,4]
[3,4,5]
mentre l'uscita effettiva era:
[4, 5, 6]
[4, 5, 6]
[4, 5, 6]
che significa che la comprensione ha utilizzato solo il valore 3 per la variabile i, indipendentemente dall'intervallo (4).
Perché questo comportamento si verifica?
avevo provato passando 'p' ad una semplice funzione esterna, e ad una funzione interna (come quella nella risposta) chiamata attraverso una lambda, a scopo di prova ed errore. notato il comportamento corretto, quando ho fatto questo: http://pastebin.com/z7E7wGKx Grazie per la risposta con il motivo per cui questo accade. – srjit
vale la pena notare che questo accade praticamente in qualsiasi lingua con chiusure/lambda, anche C# –