python - 将类函数传递给 PySpark RDD

标签 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的map中使用这个类的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有关。我不知道我哪里出错了。

我试过广播这个类,但还是不行。

最佳答案

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

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

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

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

关于python - 将类函数传递给 PySpark RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569633/

相关文章:

unit-testing - 从 reduceByKey() 调用函数时单元测试期间的导入错误

python猜数字的问题

apache-spark - 如何让 SparkSession 找到添加的 python 文件

python - pyspark 数据帧的缓慢过滤

python - 涉及带有管道的子进程的映射步骤在 PySpark 中失败

apache-spark - 无法将 Spark 应用程序提交到集群,卡在 "UNDEFINED"

python - 在 python 中找到阶乘的最佳方法?

python - 如何在没有numpy的情况下在python中每次打印跳过一个元素的列表?

python - 如何使用 python-twitter 下载 pandas dataframe 中的 url 内容?

java - Spark -> java.lang.ClassCastException : cannot assign instance of java. lang.invoke.SerializedLambda