[英]Spark UDF error when input parameter is a value concatenated from two columns of a dataframe
以下 python 代码将csv
文件加载到dataframe df
,并将字符串值从df
的单个或多个列发送到UDF
函数testFunction(...)
。 如果我发送单个列值,则代码可以正常工作。 但是,如果我从 df 的两列发送值df.address + " " + df.city
,则会收到以下错误:
问题:我可能做错了什么,我们如何解决这个问题? df
中的所有列都不是 NULL,因此 null 或空字符串不应该是 I 问题。 例如,如果我发送单列值 df.address,则该值有空格(例如 123 Main Street)。 那么,为什么将两列的连接值发送到 UDF 时会出错?
错误:
PythonException:从 UDF 引发异常:'AttributeError:'NoneType'对象没有属性'upper''
from pyspark.sql.types import StringType
from pyspark.sql import functions as F
df = spark.read.csv(".......dfs.core.windows.net/myDataFile.csv", header="true", inferSchema="true")
def testFunction(value):
mystr = value.upper().replace(".", " ").replace(",", " ").replace(" ", " ").strip()
return mystr
newFunction = F.udf(testFunction, StringType())
df2 = df.withColumn("myNewCol", newFunction(df.address + " " + df.city))
df2.show()
在 PySpark 中,您不能使用+
将 StringType 列连接在一起。 它将返回null
,这会破坏您的 udf。 您可以改用concat
。
df2 = df.withColumn("myNewCol", newFunction(F.concat(df.address, F.lit(" "), df.city)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.