不使用广播变量,如何在spark / pyspark中解析(可变)全局变量?

时间:2019-03-26 19:26:41

标签: python apache-spark pyspark

说我在python中有一个全局公共对象-

class A:
    dict1 = {}

然后我在pyspark UDF中的代码中使用它作为

在''' main '''...

中的某个位置更新A.dict1
def someFunc():
    A.dict1["key1"] = some_value

在执行程序上使用A.dict1

def udfFunc():
    val = A.dict1["key1"]
    //Do python operations on val..

注册并在pyspark上下文中使用udfFunc。 操作顺序-

1) create spark context (cluster mode)
2) load input data from hdfs/s3 etc..
3) someFunc()
4) DataFrame operations using udfFunc() 

执行者如何获取A.dict1而不是{}的更新值?

我知道这是有效的..但是尝试了解如何在spark中解决此问题的机制(当我明确不使用Broadcast变量并且这是可变的时)。 AFAIK,必需的数据,代码,env在创建时便被交付给每个执行器,此后什么也没有,因此混淆了它的工作原理。

0 个答案:

没有答案