我正在尝试从 Python 方法中创建广播变量(尝试抽象我正在创建的一些依赖于分布式操作的实用程序方法)。但是,我似乎无法从 Spark 工作人员中访问广播变量。
假设我有这个设置:
def main():
sc = SparkContext()
SomeMethod(sc)
def SomeMethod(sc):
someValue = rand()
V = sc.broadcast(someValue)
A = sc.parallelize().map(worker)
def worker(element):
element *= V.value ### NameError: global name 'V' is not defined ###
但是,如果我改为消除SomeMethod()
中间人,它就可以正常工作。
def main():
sc = SparkContext()
someValue = rand()
V = sc.broadcast(someValue)
A = sc.parallelize().map(worker)
def worker(element):
element *= V.value # works just fine
如果可以的话,我宁愿不必将所有 Spark 逻辑都放在 main 方法中。有没有办法从本地函数中广播变量并使它们对 Spark 工作人员全局可见?
或者,对于这种情况,什么是好的设计模式——例如,我想为 Spark 编写一个专门的方法,该方法是自包含的并执行我想重用的特定功能?