如何使用 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 替换整数的任何实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PySpark DataFrame 的列中分离特定字符并使用它们形成一个新列?

如何更改pyspark中的列元数据?

PySpark:如何在宽度可变的列数组上聚合?

如何在 Pyspark 的动态列列表中转义列名

在另一列pyspark中创建具有字符串长度的列

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]