我正在尝试下面的代码,它将一个数字添加到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# –