说我在python中有一个全局公共对象-
class A:
dict1 = {}
然后我在pyspark UDF中的代码中使用它作为
在''' main '''...
中的某个位置更新A.dict1def 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在创建时便被交付给每个执行器,此后什么也没有,因此混淆了它的工作原理。