如何使用 PySpark 在用于字符串的列中用 NULL 替换整数的任何实例?
Posted
技术标签:
【中文标题】如何使用 PySpark 在用于字符串的列中用 NULL 替换整数的任何实例?【英文标题】:How to replace any instances of an integer with NULL in a column meant for strings using PySpark? 【发布时间】:2021-12-10 12:39:06 【问题描述】:注意:这是Spark
版本2.1.1.2.6.1.0-129
我有一个 spark 数据框。其中一列的状态为字符串类型(例如伊利诺伊州、加利福尼亚州、内华达州)。此列中有一些数字实例(例如 12、24、01、2)。我想用NULL
替换整数的任何实例。
以下是我写的一些代码:
my_df = my_df.selectExpr(
" regexp_replace(states, '^-?[0-9]+$', '') AS states ",
"someOtherColumn")
此正则表达式将整数的任何实例替换为空字符串。我想在 python 中将其替换为 None 以将其指定为 DataFrame 中的 NULL
值。
【问题讨论】:
【参考方案1】:我强烈建议你看看PySpark SQL functions,并尝试正确使用它们而不是selectExpr
from pyspark.sql import functions as F
(df
.withColumn('states', F
.when(F.regexp_replace(F.col('states'), '^-?[0-9]+$', '') == '', None)
.otherwise(F.col('states'))
)
.show()
)
# Output
# +----------+------------+
# | states|states_fixed|
# +----------+------------+
# | Illinois| Illinois|
# | 12| null|
# |California| California|
# | 01| null|
# | Nevada| Nevada|
# +----------+------------+
【讨论】:
这用 NULL 替换了 states 列中的所有内容。您的代码没有按预期工作。 嗯,我只是重用了你原来的正则表达式 您可以尝试在模拟数据帧上测试它吗?我的正则表达式工作正常。我在一个正则表达式测试器网站上对其进行了测试。 @ZakiSiyaji 你是对的,那是我的错误,我更新了我的答案以上是关于如何使用 PySpark 在用于字符串的列中用 NULL 替换整数的任何实例?的主要内容,如果未能解决你的问题,请参考以下文章