【发布时间】:2017-11-29 12:17:20
【问题描述】:
有人可以帮我理解在 python for 循环中将映射函数附加到 RDD 的行为吗?
对于以下代码:
rdd = spark.sparkContext.parallelize([[1], [2], [3]])
def appender(l, i):
return l + [i]
for i in range(3):
rdd = rdd.map(lambda x: appender(x, i))
rdd.collect()
我得到了输出:
[[1, 2, 2, 2], [2, 2, 2, 2], [3, 2, 2, 2]]
而使用以下代码:
rdd = spark.sparkContext.parallelize([[1], [2], [3]])
def appender(l, i):
return l + [i]
rdd = rdd.map(lambda x: appender(x, 1))
rdd = rdd.map(lambda x: appender(x, 2))
rdd = rdd.map(lambda x: appender(x, 3))
rdd.collect()
我得到了预期的输出:
[[1, 1, 2, 3], [2, 1, 2, 3], [3, 1, 2, 3]]
我想这与传递给 PySpark 编译器的闭包有关,但我找不到任何关于此的文档...
【问题讨论】:
标签: apache-spark pyspark