Таким образом, если у нас есть ваш исходный кадр данных:
df = spark.createDataFrame([("53-8975", None), ("53-9875", None), ("53A7569", ""), ("53-9456", "XXXX"), ("53-9875", "")], ["id", "program"])
df.show()
+-------+-------+
| id|program|
+-------+-------+
|53-8975| null|
|53-9875| null|
|53A7569| |
|53-9456| XXXX|
|53-9875| |
+-------+-------+
Мы можем создать преобразование, которое принимает program
или "k" в соответствии с вашей спецификацией с помощью when().otherwise()
:
from pyspark.sql.functions import *
programNullOrEmpty = (col("program") == "") | (isnull(col("program")))
id9 = col("id").substr(4,1) == "9"
df.withColumn("program", when(programNullOrEmpty & id9, lit("K"))
.otherwise(col("program")))\
.show()
+-------+-------+
| id|program|
+-------+-------+
|53-8975| null|
|53-9875| K|
|53A7569| |
|53-9456| XXXX|
|53-9875| K|
+-------+-------+