gpt4 book ai didi

python - 尝试在 PYSPARK 中的 Nonetype 属性(null)上跳过 python UDF

转载 作者:行者123 更新时间:2023-11-30 22:04:50 27 4
gpt4 key购买 nike

我有 pyspark 数据框,其中包含名字和中间名列。 Middlename 列中有空值。

customer_df=

FName Middlename 
Avi null
Chec Bor-iin
Meg null
Zen Cha-gn

我已经编写了 UDF 来去除连字符

from pyspark.sql.functions import col, udf, upper, lit, when
replacehyphens = udf(lambda string_val: string_val.replace('-',''))
customer_df=customer_df.withColumn('Middlename',
when('Middlename'.isNull,lit('')).otherwise
(replacehyphens(col('Middlename'))))

我收到 AttributeError: 'str' 对象没有属性 'isNull'

我在这里缺少什么?

最佳答案

通过使用'Middlename'.isNull,您将在字符串而不是列对象上调用isNull 方法。您需要 col('Middlename').isNull()df.Middlename.isNull();或者您可以使用 regexp_replace 方法而不是创建 udf:

from pyspark.sql.functions import regexp_replace
df.withColumn('Middlename', regexp_replace(df.Middlename, '-', '')).show()
+-----+----------+
|FName|Middlename|
+-----+----------+
| Avi| null|
| Chec| Boriin|
| Meg| null|
| Zen| Chagn|
+-----+----------+

要将 null 替换为空字符串,请使用 na.fill(''):

df.withColumn('Middlename', regexp_replace(df.Middlename, '-', '')).na.fill('', 'Middlename').show()
+-----+----------+
|FName|Middlename|
+-----+----------+
| Avi| |
| Chec| Boriin|
| Meg| |
| Zen| Chagn|
+-----+----------+
<小时/>

如果您必须使用 udf,请确保在 udf 内部执行空检查以避免 Nonetype 错误:

replacehyphens = udf(lambda s: s.replace('-', '') if s else '')
df.withColumn('Middlename', replacehyphens('Middlename')).show()
+-----+----------+
|FName|Middlename|
+-----+----------+
| Avi| |
| Chec| Boriin|
| Meg| |
| Zen| Chagn|
+-----+----------+

关于python - 尝试在 PYSPARK 中的 Nonetype 属性(null)上跳过 python UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com