Gar*_*vey 1 apache-spark pyspark
在集群模式下,如何编写一个闭包函数f让每个 worker 访问变量的副本N。
N=5
lines=sc.parallelize(['early radical', 'french revolution','pejorative way', 'violent means'])
def f1(line):
return line[:N]
l=lines.map(f1)
l.collect()
Run Code Online (Sandbox Code Playgroud)
我正在尝试尝试以找出我的理解是否正确。在我的示例中,f1在本地模式下工作。
我没有任何集群,我真的很想知道它是否可以在集群模式下工作?换句话说,worker 可以访问 variable N,它在外部定义f1但f1在驱动程序节点内部使用。
小智 5
换句话说,worker 可以访问变量 N,该变量在 f1 外部定义但在驱动程序节点中的 f1 内部使用。
的种类。
然而,当这段代码被计算时,Spark 将分析f1定义,确定闭包中存在的变量,并将它们与f1.
因此,当函数被实际调用时,父环境的本地副本将出现在作用域中。
记住这两件事,我们可以回答这个问题:
我没有任何集群,我真的很想知道它是否可以在集群模式下工作?
是的,它可以在分布式集群上正常工作。
但是,如果您尝试修改通过闭包传递的对象,则更改将不会传播并且只会影响本地副本(换句话说,甚至不要尝试)。
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |