如何使用 PySpark 在用于字符串的列中用 NULL 替换整数的任何实例?
How to replace any instances of an integer with NULL in a column meant for strings using PySpark?
注意:这是针对 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
值。
我强烈建议您查看 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|
# +----------+------------+
注意:这是针对 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
值。
我强烈建议您查看 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|
# +----------+------------+