Python 3.x Pyspark中的UDF和python函数
我在Pyspark中有一个数据帧: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":
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(列,列),“列应为列” 您可以通过两种方式定义自定义项:
您编写的每个函数都需要应用于列,您必须将其转换为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|
+---+----+-------+-------------+