我正在嘗試下面的代碼,它將一個數字添加到RDD中的每一行,並使用PySpark返回一個RDD列表。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()
在輸入文件(sample.txt的)的含量爲:
1
2
3
我(分別與0添加數字在RDD,1,2)期待像這樣的輸出:
[1,2,3]
[2,3,4]
[3,4,5]
而實際產量爲:
[4, 5, 6]
[4, 5, 6]
[4, 5, 6]
這意味着理解只使用變量i的值3,而不考慮範圍(4)。
爲什麼會發生這種行爲?
我曾試圖通過「P」,以一個簡單的外部函數,以及內部函數(如一個在答案中)通過一個lambda調用,用於試驗和錯誤目的。 注意到正確的行爲,當我這樣做:http://pastebin.com/z7E7wGKx 謝謝你回答爲什麼發生這種情況的原因。 – srjit
值得注意的是,這發生在幾乎任何語言的閉包/ lambdas,甚至C# –