首页 > 解决方案 > 如何使用 PySpark 在用于字符串的列中用 NULL 替换整数的任何实例?

问题描述

注意:这是Spark版本2.1.1.2.6.1.0-129

我有一个火花数据框。其中一列的状态为字符串类型(例如伊利诺伊州、加利福尼亚州、内华达州)。此列中有一些数字实例(例如 12、24、01、2)。我想用 . 替换整数的任何实例NULL

以下是我编写的一些代码:

my_df = my_df.selectExpr(
        " regexp_replace(states, '^-?[0-9]+$', '') AS states ",
        "someOtherColumn")

此正则表达式将整数的任何实例替换为空字符串。我想在 python 中将其替换为 None 以将其指定为NULLDataFrame 中的值。

标签: pythonpython-2.7apache-sparkpysparkregexp-replace

解决方案


我强烈建议您查看PySpark SQL 函数,并尝试正确使用它们而不是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|
# +----------+------------+

推荐阅读