【问题标题】:spark error "It appears that you are attempting to reference SparkContext from a broadcast "火花错误“看来您正试图从广播中引用 SparkContext”
【发布时间】:2015-07-24 09:33:48
【问题描述】:

以下是我课堂上的函数:

def labeling(self, value, labelMap, dtype='string'):
        if dtype.value == 'string':
            result = [i for v,i in labelMap.value if value==v][0]
            return result
        else:
            result = [i for v,i in labelMap.value if value<v][0]
            return result

def labelByValue(self, labelMap, dtype='string'):
        labeling = self.labeling
        labelMap = self.sc.broadcast(labelMap)
        dtype = self.sc.broadcast(dtype)
        self.RDD = self.RDD.map(labeling)

但是当我在“ma​​in”中调用下面的函数时,它会报告如下错误:“”您似乎正在尝试从广播中引用 SparkContext“”

class.RDD.labelByValue((('a', 1), ('b', 2), ('c', 3)))

我自己找不到任何东西。 所以我来这里寻求帮助 提前致谢。

【问题讨论】:

    标签: broadcast pyspark


    【解决方案1】:

    我终于解决了这个错误。

    错误的一点是用户定义的函数应该放在全局环境中,而不是放在类中。

    所以标注应该是这样的:

    def labeling(value, labelMap, dtype='string'):
            if dtype.value == 'string':
                result = [i for v,i in labelMap.value if value==v][0]
                return result
            else:
                result = [i for v,i in labelMap.value if value<v][0]
                return result
    

    【讨论】:

    • 遇到类似问题并将 UDF 移出课堂。它有效!
    • 在处理 Dstream 时遇到了类似的问题。通过使函数全局化来解决。谢谢你的帖子。
    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多