簡體   English   中英

當輸入參數是從數據幀的兩列連接的值時,Spark UDF 錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM