spark错误"看来你正试图从广播中引用SparkContext"

Wei*_*rot 2 broadcast pyspark

以下是我班级的功能:

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)
Run Code Online (Sandbox Code Playgroud)

但是当我在" main "中调用下面的函数时,它报告错误如:""看来你正试图从广播中引用SparkContext""

class.RDD.labelByValue((('a', 1), ('b', 2), ('c', 3)))
Run Code Online (Sandbox Code Playgroud)

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

Wei*_*rot 5

我终于完成了这个错误.

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

所以标签应该是这样的:

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
Run Code Online (Sandbox Code Playgroud)

  • 遇到了类似的问题,并将 UDF 移到了课堂之外。有用! (2认同)