[英]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.