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).