相关疑难解决方法(0)

PySpark从本地函数广播变量

我正在尝试从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 ###
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为消除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
Run Code Online (Sandbox Code Playgroud)

如果可以的话,我宁愿不必将所有Spark逻辑放在main方法中.有没有办法从本地函数中广播变量并让它们对Spark工作者全局可见?

或者,对于这种情况,什么是一个好的设计模式 - 例如,我想专门为Spark编写一个自包含的方法,并执行我想重用的特定功能?

python apache-spark pyspark

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

apache-spark ×1

pyspark ×1

python ×1