以下 python 代碼將csv檔案加載到函式dataframe df中,并將字串值從單個或多個列發送df到UDFfunction testFunction(...)。如果我發送單個列值,則代碼可以正常作業。df.address " " df.city但是,如果我從 df 的兩列發送一個值,我會收到以下錯誤:
問題:我可能做錯了什么,我們如何解決這個問題?中的所有列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()
uj5u.com熱心網友回復:
在 PySpark 中,您不能使用 . 它會回傳null破壞你的udf。你可以concat改用。
df2 = df.withColumn("myNewCol", newFunction(F.concat(df.address, F.lit(" "), df.city)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/479936.html
標籤:Python python-3.x 数据框 阿帕奇火花 pyspark
上一篇:在ApacheSpark3.0結構化流中限制批量大小-MicroBatchStream
下一篇:如何根據其他值洗掉冗余值?
