将 class 函数传递给 PySpark RDD
Passing class functions to PySpark RDD
我在此处的 Python 文件中有一个名为 some_class() 的 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
的映射中使用这个 class 的名为 some_function 的函数
sc.parallelize(some_data_iterator).map(lambda x: clss.some_function(x))
这给我一个错误:
No module named file
虽然 class.some_function 当我在 pyspark 的 map 函数之外调用它时,即通常但不在 pySpark 的 RDD 中。我认为这与pyspark有关。我不知道我哪里错了。
我试过广播这个class但还是不行。
所有 Python 依赖项必须存在于工作节点的搜索路径上,或者使用 SparkContext.addPyFile
方法手动分发,所以像这样的事情应该可以解决问题:
sc.addPyFile("/some-folder/app/bin/file.py")
它会将文件复制到所有worker并放置在工作目录中。
请注意,请不要使用 file
作为模块名称,即使它只是一个示例。隐藏 Python 中的内置函数不是一个好主意。
我在此处的 Python 文件中有一个名为 some_class() 的 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
的映射中使用这个 class 的名为 some_function 的函数sc.parallelize(some_data_iterator).map(lambda x: clss.some_function(x))
这给我一个错误:
No module named file
虽然 class.some_function 当我在 pyspark 的 map 函数之外调用它时,即通常但不在 pySpark 的 RDD 中。我认为这与pyspark有关。我不知道我哪里错了。
我试过广播这个class但还是不行。
所有 Python 依赖项必须存在于工作节点的搜索路径上,或者使用 SparkContext.addPyFile
方法手动分发,所以像这样的事情应该可以解决问题:
sc.addPyFile("/some-folder/app/bin/file.py")
它会将文件复制到所有worker并放置在工作目录中。
请注意,请不要使用 file
作为模块名称,即使它只是一个示例。隐藏 Python 中的内置函数不是一个好主意。