如何将类中的python函数注册为sparksql的udf

如何将类中的python函数注册为sparksql的udf,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我的问题是: 我有一个类,其中包含一些用于nlp处理的函数,我还必须使用sparksql dataframe来处理这些问题 这里有一个例子 是否有任何方法将sparkSQL dataFrame中的列“address”作为全局值放入类中,并作为self.content插入udf函数? 谢谢为什么需要将其存储在类字段(self.content)中?您可以将内容参数添加到\uuu nlp\u cut中,调用UDF时,地址值将被传递给它。@SergeyKhudyakov感谢您的回复,想一个可能的方法将U

我的问题是:

我有一个类,其中包含一些用于nlp处理的函数,我还必须使用sparksql dataframe来处理这些问题

这里有一个例子 是否有任何方法将sparkSQL dataFrame中的列“address”作为全局值放入类中,并作为self.content插入udf函数?
谢谢

为什么需要将其存储在类字段(
self.content
)中?您可以将
内容
参数添加到
\uuu nlp\u cut
中,调用UDF时,
地址
值将被传递给它。@SergeyKhudyakov感谢您的回复,想一个可能的方法将UDF函数注册为类似乎不可能?正确的?有时我想在类中使用全局变量来处理所有过程……可以在UDF中使用一个类,但它仍然必须是一个函数,将列值作为参数,将其分配给
self.content
(或创建nlpcut的实例),然后调用其他对象方法。但请记住,每一行都会有一个新的类实例。换句话说,您将无法看到UDF之外的
self.content
。此外,您试图从实例(
DPP()。\uuuu spark\u session
)调用静态方法,然后从类
DPP.\uuuu nlp\u cut
)引用实例方法,因此它将是一个无界方法。
class nlpcut:

    def __init__(self,content):
         self.content = content

    @staticmethod
    def __spark_session(filePath):
        filePath = SparkSession.builder.appName('test').master('yarn').getOrCreate()
        dataFrameReader = session.read
        data = dataFrameReader.option('header','true') \
                              .option('inferSchema',value=True) \
                              .csv(filePath)
        return data

     def __nlp_cut(self):
         # processing some nlp cut..
         cut = nlp.cut(self.content)

         return cut

     def spark_nlp_cut(self):

         # here i want to use sparksql UDF 
         data_session = DPP().__spark_session('/project/test.csv')

         # i have problem at this part, how can i insert column 'address' content into class self.content in to class DPP?

         my_udf = udf(DPP.__nlp_cut, StringType())

         data_session.select('address',my_udf('address').alias('address_cut')).show()