我可以使用pyspark rdd map并将functools.partial的结果应用于全局范围函数吗?

时间:2017-08-17 16:18:22

标签: python apache-spark pyspark

我正在尝试使用python functools partial来创建一个与spark rdd map函数一起使用的函数。问题是闭包包括不在群集任务节点上的文件。解决这个问题的最佳方法是什么?我想做的是:

def f(row, p1, p2):
   ...

def transform(rdd, p1, p2):
   mapF = functools.partial(f, p1=p1, p2=p2)
   return rdd.map(mapF)

但我得到的错误是编写此代码的模块不存在。我知道我可以使用spark选项将代码发送到其他节点 - 但此时我在一个jupyter笔记本中处于开发模式 - 使用固定参数启动一次spark应用程序,我必须找到一种hacky方式(我认为)手动将更新的文件提供给任务节点。

另一件事就是放弃我在全局范围内的好函数,如果我把它放在我的转换函数中,那么我可以使用partial,这就行了:

def transform(rdd, p1, p2):
   def f(row, p1, p2):
       ...    
   mapF = functools.partial(f, p1=p1, p2=p2)
   return rdd.map(mapF)

0 个答案:

没有答案