繁体   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