Python 3.x Pyspark中的UDF和python函数

Python 3.x Pyspark中的UDF和python函数,python-3.x,pyspark,user-defined-functions,Python 3.x,Pyspark,User Defined Functions,我在Pyspark中有一个数据帧: listA = [(1,'AAA','USA'),(2,'XXX','CHN'),(3,'KKK','USA'),(4,'PPP','USA'),(5,'EEE','USA'),(5,'HHH','THA')] df = spark.createDataFrame(listA, ['id', 'name','country']) 我还创建了一本字典: thedict={"USA":"WASHINGTON","CHN":"BEIJING","DEFAULT":

我在Pyspark中有一个数据帧:

listA = [(1,'AAA','USA'),(2,'XXX','CHN'),(3,'KKK','USA'),(4,'PPP','USA'),(5,'EEE','USA'),(5,'HHH','THA')]
df = spark.createDataFrame(listA, ['id', 'name','country'])
我还创建了一本字典:

thedict={"USA":"WASHINGTON","CHN":"BEIJING","DEFAULT":"KEY NOT FOUND"}
然后我创建了一个UDF来从字典中获取匹配的键值

def my_func(letter):
    if(thedict.get(letter) !=None):
        return thedict.get(letter)
    else:
        return thedict.get("DEFAULT")
尝试将函数调用为时出现以下错误:

df.withColumn('CAPITAL',my_func(df.country))

  File "<stdin>", line 1, in <module>
  File "/usr/hdp/current/spark2-client/python/pyspark/sql/dataframe.py", line 1848, in withColumn
    assert isinstance(col, Column), "col should be Column"
AssertionError: col should be Column

我不明白这两个电话有什么不同

UDF函数具有特殊属性,它们采用列/s并按行应用逻辑以生成新列。而普通python函数只接受一个离散参数,并生成一个输出

这就是错误所在。函数返回的值不是列

断言isinstance(列,列),“列应为列”

您可以通过两种方式定义自定义项:

  • myudf=udf(LAMBDA_表达式,返回_类型)
  • myudf=udf(自定义函数,返回类型)

  • 您编写的每个函数都需要应用于列,您必须将其转换为pyspark
    UDF
    ,然后使用它@阿里。这似乎不是真的。请参阅下面的代码。很好用。listA=[('A',10,20,40,60),('B',10,10,10,40)]df=spark.createDataFrame(listA,['id','M1','M2','M3','M4'])def add_column(*args):args中i的num=0:num=num+i返回num newdf=df.withColumn('TOTAL',add_column(df.M1,df.M2,df.M3))没有我创建了python自定义项,如:def add_column(*args):num=0表示args中的i:num=num+i返回numYeah,我看到了。您是否尝试过任何类似于
    add_column
    的功能,但没有使用
    udf
    将其应用于column?我不知道到底是什么问题,但我建议您使用
    udf
    来完成工作!我明白了,谢谢你的意见。但是为什么它在上面注释部分解释的示例中工作。在这里,我还使用withCoulmn调用python函数,并将多个参数传递给它。我错过什么了吗?
    from pyspark.sql.functions import col, udf
    udfdict = udf(my_func,StringType())
    
    df.withColumn('CAPITAL',udfdict(df.country)).show()
    
    +---+----+-------+-------------+
    | id|name|country|      CAPITAL|
    +---+----+-------+-------------+
    |  1| AAA|    USA|   WASHINGTON|
    |  2| XXX|    CHN|      BEIJING|
    |  3| KKK|    USA|   WASHINGTON|
    |  4| PPP|    USA|   WASHINGTON|
    |  5| EEE|    USA|   WASHINGTON|
    |  5| HHH|    THA|KEY NOT FOUND|
    +---+----+-------+-------------+