pyspark在数据框中使用null替换多个值

Dat*_*101 2 apache-spark pyspark pyspark-sql databricks

我有一个数据框(df),并且在该数据框内有一列user_id

df = sc.parallelize([(1, "not_set"),
                     (2, "user_001"),
                     (3, "user_002"),
                     (4, "n/a"),
                     (5, "N/A"),
                     (6, "userid_not_set"),
                     (7, "user_003"),
                     (8, "user_004")]).toDF(["key", "user_id"])
Run Code Online (Sandbox Code Playgroud)

df:

+---+--------------+
|key|       user_id|
+---+--------------+
|  1|       not_set|
|  2|      user_003|
|  3|      user_004|
|  4|           n/a|
|  5|           N/A|
|  6|userid_not_set|
|  7|      user_003|
|  8|      user_004|
+---+--------------+
Run Code Online (Sandbox Code Playgroud)

我想用空值替换以下值:not_set,n / a,N / A和userid_not_set

如果我可以将任何新值添加到列表中并且可以更改它们,那将是很好的。

我目前在spark.sql中使用CASE语句来执行此操作,并希望将其更改为pyspark。

cph*_*sto 5

Nonewhen()函数内部对应null。如果您希望填写其他内容而不是null,则必须在该位置填写。

from pyspark.sql.functions import col    
df =  df.withColumn(
    "user_id",
    when(
        col("user_id").isin('not_set', 'n/a', 'N/A', 'userid_not_set'),
        None
    ).otherwise(col("user_id"))
)
df.show()
+---+--------+
|key| user_id|
+---+--------+
|  1|    null|
|  2|user_001|
|  3|user_002|
|  4|    null|
|  5|    null|
|  6|    null|
|  7|user_003|
|  8|user_004|
+---+--------+
Run Code Online (Sandbox Code Playgroud)