将类函数传递给 PySpark RDD
Posted
技术标签:
【中文标题】将类函数传递给 PySpark RDD【英文标题】:Passing class functions to PySpark RDD 【发布时间】:2015-09-14 16:33:01 【问题描述】:我在 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】:所有 Python 依赖项必须要么存在于工作节点的搜索路径上,要么使用 SparkContext.addPyFile
方法手动分发,所以这样的事情应该可以解决问题:
sc.addPyFile("/some-folder/app/bin/file.py")
它将文件复制到所有工作人员并放置在工作目录中。
请注意不要使用file
作为模块名称,即使它只是一个示例。在 Python 中隐藏内置函数并不是一个好主意。
【讨论】:
有没有办法将文件夹添加到路径而不是单个文件 addPyFile 可以采用zip
文件。您可以压缩整个源代码树,然后使用 addPyFile 添加它。以上是关于将类函数传递给 PySpark RDD的主要内容,如果未能解决你的问题,请参考以下文章