在PySpark中的列上使用UADF

我试图将UDAF应用于PySpark中数据框的一列。我有一个名为pred的数据框,必须在上面应用UADF。

def classifier_fn(data):
    spark_object = spark.createDataFrame(data,"string").toDF("text")
    pred = model.transform(spark_object)   #if you build the model with a different name,make appropriate changes here
    output = np.array((pred.select("probability").collect())).reshape(len(data),2)
    return output

class_names = ['Atheism','Christian']
explainer = LimeTextExplainer(class_names=class_names)

def exp(x):
   l = explainer.explain_instance(x,classifier_fn,num_features=6).as_list()
   return str(l)

explain = F.udf(lambda x: exp(x),StringType())

df2 = pred.withColumn('explanation',explain(F.col("text"))).select("index","explanation")

这里的解释器是LimeTextExplainer的一个实例,它解释了文本字段中单词对预测结果的重要性。我有一个名为classifier_fn的函数,该函数接受文本并返回类的概率。我正在使用自己的udf来调用解释器函数,但出现以下错误:

  

PicklingError:无法序列化对象:异常:似乎   您正在尝试从广播中引用SparkContext   变量,动作或变换。 SparkContext只能在   驱动程序,而不是在工作程序上运行的代码中。了解更多信息,   参见SPARK-5063。

有人可以为此建议解决方案吗?

cisya 回答:在PySpark中的列上使用UADF

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3077431.html

大家都在问