【问题标题】:Passing class functions to PySpark RDD将类函数传递给 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有关。我不知道我哪里错了。

我试过直播这堂课,但还是不行。

【问题讨论】:

    标签: python apache-spark pyspark rdd


    【解决方案1】:

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

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

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

    请注意不要使用file 作为模块名称,即使它只是一个示例。在 Python 中隐藏内置函数并不是一个好主意。

    【讨论】:

    • 有没有办法将文件夹添加到路径而不是单个文件
    • addPyFile 可以采用zip 文件。您可以压缩整个源代码树,然后使用 addPyFile 添加它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2019-10-11
    • 2022-01-22
    相关资源
    最近更新 更多