Python 如何在Pyspark中的lambda函数中附加数据帧的特定列?

Python 如何在Pyspark中的lambda函数中附加数据帧的特定列?,python,dataframe,lambda,pyspark,user-defined-functions,Python,Dataframe,Lambda,Pyspark,User Defined Functions,我生成了一个UserDefinedFunction,如下所示: def function1(instance): if(instance['Atr1'] == '--'): return '++' else: return '++++' from pyspark.sql.functions import UserDefinedFunction udf = UserDefinedFunction(lambda instance: function

我生成了一个UserDefinedFunction,如下所示:

def function1(instance):
    if(instance['Atr1'] == '--'):
        return '++'
    else:
        return '++++'

from pyspark.sql.functions import UserDefinedFunction

udf = UserDefinedFunction(lambda instance: function1(instance), StringType())

udf(df)
其中我的数据帧有一些属性:“Atr1”、“Atr2”、“AtrN”

我得到一个错误:

AttributeError: 'DataFrame' object has no attribute '_get_object_id'

我想要一个只有阿曲布他酯的专栏。我该怎么做呢?

你可以在你需要的专栏中调用udf

from pyspark.sql.functions import UserDefinedFunction
udf = UserDefinedFunction(lambda instance: instance, StringType())
df.select(udf('Atr1')).collect()
要使用上述简单函数基于现有属性创建属性,我们不需要udf。我们能做到

from pyspark.sql import functions as F
df.withColumn('Atr4',F.when(df.Atr1 == '--','++').otherwise('++++')).show()
或者,如果使用相同的逻辑创建许多属性,我们可以将它们作为udf移动并使用它们

 udf = UserDefinedFunction(lambda attr: F.when(attr == '--','++').otherwise('++++'), StringType())
 df.select('Atr1','Atr2','Atr3',udf('Atr1').alias('Atr4'),udf('Atr2').alias('Atr5')).show()

等等。

如果我有一个函数,可以对实例的不同属性进行一些操作,那该怎么办?我的意思是,如果我有一个名为“func(instance)”的函数,它对实例的属性进行一些操作,我称它为“udf=UserDefinedFunction(lambda实例:func(instance),StringType())”。让“func(instance)”代码为:“if(instance['Atr1']>0):return true”我编辑了这个问题以便您更好地理解。因此,基于Atr1,您想要创建一个新属性或更改Atr1值??我想要创建一个新属性。好的,回答不错。我仍然想知道,如果方法更复杂(许多循环和ifs),我如何处理这个问题。我编辑了这个问题,以更好地表示我想要得到的。