говорят, что у меня есть общий глобальный объект в python-
class A:
dict1 = {}
Затем я использую его в коде в pyspark UDF as-
Обновите A.dict1 где-нибудь в '' ' main ' '' ...
def someFunc():
A.dict1["key1"] = some_value
Использовать A.dict1 для исполнителя
def udfFunc():
val = A.dict1["key1"]
//Do python operations on val..
Зарегистрируйтесь и используйте udfFunc в контексте pyspark.
Последовательность операций -
1) create spark context (cluster mode)
2) load input data from hdfs/s3 etc..
3) someFunc()
4) DataFrame operations using udfFunc()
Как исполнитель получает обновленное значение A.dict1, а не {}?
Я знаю, что это работает .. но я пытаюсь понять механизм того, как это разрешается в искре (когда я явно не использую переменную Broadcast и когда она изменчива). AFAIK, необходимые данные, код, env отправляются каждому исполнителю при его создании, и ничего после этого, следовательно, путают, как это работает.