Python 在单独的文件中访问用户定义函数(udf)中的广播变量
我在一个单独的py文件中设置了广播变量,然后将其导入包含我的udf的文件中。但是当我尝试在UDF中使用这个变量时,我发现广播变量在一些Python 在单独的文件中访问用户定义函数(udf)中的广播变量,python,apache-spark,pyspark,user-defined-functions,broadcast,Python,Apache Spark,Pyspark,User Defined Functions,Broadcast,我在一个单独的py文件中设置了广播变量,然后将其导入包含我的udf的文件中。但是当我尝试在UDF中使用这个变量时,我发现广播变量在一些Dataframe转换函数的作用域中使用时没有初始化(NoneType)。这是支持代码 广播模型位于utils.py中,定义如下: class Broadcaster(object): _map = {} _bv = None @staticmethod def set_item(k, v): Broadcaste
Dataframe
转换函数的作用域中使用时没有初始化(NoneType)。这是支持代码
广播模型位于utils.py
中,定义如下:
class Broadcaster(object):
_map = {}
_bv = None
@staticmethod
def set_item(k, v):
Broadcaster._map[k] = v
@staticmethod
def broadcast(sc):
Broadcaster._bv = sc.broadcast(Broadcaster._map)
@staticmethod
def get_item(k):
val = Broadcaster._bv.value
return val.get(k)
这样做的原因是为了提供一个接口,在该接口中,可以在广播之前设置多个k、v组合。这意味着,在我的main.py
中,我现在可以多次调用Broadcaster.set_item(k,v)
,然后最终调用broadcast.broadcast(sc)
,工作正常。但是现在,我想在UDF中使用这个广播变量,它位于一个单独的文件中(比如udfs.py
)。请注意,这些UDF用于myDataframe
处理。下面是一个UDF示例
def my_udf(col):
bv = Broadcaster._bv.value #this throws exception :-(
#more code
在我的udfs.py
文件中,访问Broadcaster.\u bv.value
没有问题。只是当在udf中使用并且从Dataframe
中调用此udf时,我得到的NoneType
没有值
异常。工作节点基本上无法访问广播变量。为什么不能在交叉文件中使用广播变量?我见过一些例子,人们在同一个文件中定义udf,其中存在广播变量,并且它似乎工作得很好。但是由于代码量太大,我需要将它们放在单独的文件中。我有什么选择
编辑:我不想序列化对象,在调用期间将其传递给UDF,并在UDF中反序列化。我认为这违背了广播变量的目的