我一直在使用这个在线jupyter笔记本https://tmpnb.org/上的Spark和Python,并尝试了3种传递python函数的方法:
1)使用地图
import numpy as np
def my_sqrt(x):
return np.sqrt(x)
sc.parallelize(range(10)).map(my_sqrt).collect()
Run Code Online (Sandbox Code Playgroud)
2)并行化my_sqrt并调用它
sc.parallelize([(my_sqrt, i) for i in range(10)]).map(lambda x : x[0](x[1])).collect()
Run Code Online (Sandbox Code Playgroud)
3)并行化np.sqrt并调用它
sc.parallelize([(np.sqrt, i) for i in range(10)]).map(lambda x : x[0](x[1])).collect()
Run Code Online (Sandbox Code Playgroud)
(1)和(3)做工作,(2)没有.首先,我想了解为什么/如何(1)和(3)工作.其次,我想了解为什么(2)没有,以及可以做些什么来使它工作.