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

2024-06-12 05:31:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

class A:
    dict1 = {}

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

在“'main''的某处更新A.dict1

def someFunc():
    A.dict1["key1"] = some_value

对执行者使用.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() 

executor如何获得A.dict1的更新值而不是{}

我知道这是可行的,但是我试图理解spark中如何解决这个问题的机制(当我显式地不使用Broadcast变量并且这个变量是可变的时)。AFAIK,required data,code,env在创建时发送给每个执行器,之后什么都没有,因此混淆了它的工作原理


Tags: 代码datadefval全局classsparkpyspark