【发布时间】:2016-12-21 02:07:53
【问题描述】:
我有一个非常简单的代码:
def fun(x, n):
return (x, n)
rdds = []
for i in range(2):
rdd = sc.parallelize(range(5*i, 5*(i+1)))
rdd = rdd.map(lambda x: fun(x, i))
rdds.append(rdd)
a = sc.union(rdds)
print a.collect()
我预计输出如下:
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]
但是,输出如下:
[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]
至少可以这么说,这令人困惑。
看来,由于对 RDD 的惰性评估,用于创建 RDD 的 i 的值是它在调用 collect() 时所承载的值,即 1(来自 @987654326 的最后一次运行@循环)。
现在,元组的两个元素都派生自i。
但是对于元组的第一个元素,i 的值似乎是 0 和 1,而对于元组的第二个元素 i 的值是 2。
有人能解释一下发生了什么吗?
谢谢。
【问题讨论】:
标签: python apache-spark pyspark lazy-evaluation