小编ran*_*ith的帖子

访问单独文件中用户定义函数 (udf) 中的广播变量

我在单独的 py 文件中设置了广播变量,然后将其导入到包含 UDF 的文件中。但是当我尝试在 UDF 中使用此变量时,我发现广播变量在某些转换函数的范围内使用时未初始化(NoneType)Dataframe。这是支持代码。

广播模型的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)
Run Code Online (Sandbox Code Playgroud)

这样做的原因是提供一个可以在广播之前设置多个 k,v 组合的接口。这意味着,在我的 中main.py,我现在可以Broadcaster.set_item(k, v)多次调用,然后最终调用Broadcaster.broadcast(sc),效果很好。但现在,我想在 UDF 中使用这个广播变量,它位于一个单独的文件中(例如udfs.py)。请注意,这些 UDF 在我的处理中使用Dataframe。下面是一个示例 UDF,

def my_udf(col):
    bv = Broadcaster._bv.value    #this throws exception :-(
    #more code
Run Code Online (Sandbox Code Playgroud)

在我的udfs.py文件中,访问Broadcaster._bv.value. 只是当在 udf 中使用并且从内部调用此 …

python broadcast user-defined-functions apache-spark pyspark

5
推荐指数
0
解决办法
515
查看次数