Случай, когда оператор для условного заполнения столбцов в pyspark

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

У меня есть ПиСпарк, как показано ниже:

 df6 = df_n_a 
        .withColumn("x", explode_outer(col("x"))) 
        .withColumn("y", when( 
            col('x.e')=='S',  lit(None).cast("string")) 
                    .when(col('x.e')=='C', element_at("m.n.o", -1))) 
            .select(
                from_unixtime(col("x.w")).alias("w"),
                col("x.e").alias("e"),
                col("y"),
        )
 

Я хочу заполнить столбец » y «как NULL, если x.e это «S», а если это «C», то заполните его логикой, используя element_at, так как это массив. Проблема здесь в том, что когда начинается выполнение, даже если x.e «S» означает «когда» для ввода как » C » выполняется. Это дает ключевую ошибку, как записи типа ‘Х.е’==’s’ в входных данных JSON не будет иметь ключи м.Н.о’. Есть ли способ, чтобы строго наложить логику, где, если x.e ==’ы’, то сделать это null, а не продолжать со следующего, когда заявление. Я пробовал с другим после первого, когда, и это все равно не сработает. Спасибо!

Комментарии:

1. Не могли бы вы, пожалуйста, добавить несколько примеров ввода и ожидаемых результатов?