将类函数传递给PySpark RDD

时间:2015-09-14 16:33:02

标签: python apache-spark pyspark rdd

我在Python文件中有一个名为some_class()的类:

/some-folder/app/bin/file.py

我将其导入我的代码:

/some-folder2/app/code/file2.py

通过

import sys
sys.path.append('/some-folder/app/bin')
from file import some_class

clss = some_class()

我想在spark的地图中使用这个类名为some_function的函数

sc.parallelize(some_data_iterator).map(lambda x: clss.some_function(x))

这给了我一个错误:

No module named file

当我在pyspark的map函数之外调用class.some_function时,即通常但不在pySpark的RDD中。我认为这与pyspark有关。我不知道我在哪里出错了。

我尝试播放这个课程但仍然没有工作。

1 个答案:

答案 0 :(得分:5)

所有Python依赖项必须存在于工作节点的搜索路径上,或者使用SparkContext.addPyFile方法手动分发,所以这样的事情应该可以解决这个问题:

sc.addPyFile("/some-folder/app/bin/file.py")

它会将文件复制到所有工作人员并放在工作目录中。

另外请注意,请不要使用file作为模块名称,即使它只是一个示例。 Python中的阴影内置函数不是一个好主意。