Как заменить строковое значение на NULL в PySpark?

Я хочу сделать что-то вроде этого:

df.replace('empty-value', None, 'NAME')

в принципе, я хочу заменить некоторое значение на NULL. но он не принимает ничего в этой функции. Как я могу это сделать?

2 ответов


это заменить empty-value С None в своем


вы можете комбинировать when п. с NULL литерал и типы литья следующим образом:

from pyspark.sql.functions import when, lit, col

df = sc.parallelize([(1, "foo"), (2, "bar")]).toDF(["x", "y"])

def replace(column, value):
    return when(column != value, column).otherwise(lit(None))

df.withColumn("y", replace(col("y"), "bar")).show()
## +---+----+
## |  x|   y|
## +---+----+
## |  1| foo|
## |  2|null|
## +---+----+

Он не вводит BatchPythonEvaluation и из-за этого должно быть значительно эффективнее, чем использование UDF.