Spark返回Pickle错误:无法查找属性

Gui*_*e G 7 python pickle apache-spark

尝试在我的RDD中启动一个类时,我正在运行一些属性查找问题.

我的工作流程

1-从RDD开始

2-获取RDD的每个元素,为每个元素启动一个对象

3- Reduce(我将编写一个稍后将定义reduce操作的方法)

这是#2:

>class test(object):
def __init__(self, a,b):
    self.total = a + b

>a = sc.parallelize([(True,False),(False,False)])
>a.map(lambda (x,y): test(x,y))
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

PicklingError:不能咸菜<类的.测试'>:属性查找.测试失败

我想知道它是否有任何解决方法.请回答一个工作示例来实现预期的结果(即创建类"测试"对象的RDD).

相关问题:

Gui*_*e G 13

来自Davies Liu(DataBricks):

"目前,PySpark无法支持pickle当前脚本中的一个类对象(' main '),解决方法可能是将该类的实现放入一个单独的模块中,然后使用"bin/spark-submit --py-files xxx. py"在部署它.

在xxx.py中:

class test(object):
     def __init__(self, a, b):
        self.total = a + b
Run Code Online (Sandbox Code Playgroud)

在job.py中:

from xxx import test
a = sc.parallelize([(True,False),(False,False)])
a.map(lambda (x,y): test(x,y))
Run Code Online (Sandbox Code Playgroud)

运行它:

bin/spark-submit --py-files xxx.py job.py
Run Code Online (Sandbox Code Playgroud)

"

只是想指出你也可以在Spark Shell中传递相同的参数(--py-files).

  • 如果'spark`为`dill'换出`cloudpickle`,你可以这样做.https://spark-project.atlassian.net/browse/SPARK-791 (2认同)