В кадре данных искры я пытаюсь назначить значение столбца на основе другого значения столбца при других условиях, используя withColumn Когда Иначе logi c в Spark Java.
На входе есть 3 записи, которые имеет 3 красных, желтых и зеленых значения в столбце CODE соответственно.
Ниже приведены логи c, которые я использую в Spark Java:
df = df.withColumn("TYPE",
((Column) when(df.col("CODE").$eq$bang$eq("RED"),(functions.lit("X")))
.when(df.col("CODE").$eq$bang$eq("YELLOW"),(functions.lit("X")))
.when(df.col("CODE").$eq$bang$eq("GREEN"),(functions.lit("Y"))))
.otherwise(functions.lit("N")).alias("TYPE"));
Ниже приведен результат я получаю:
+---------+----------+
|CODE |TYPE |
+---------+----------+
|red |X |
|yellow |X |
|green |X |
+---------+----------+
Вместо того, чтобы получить X, X, Y как TYPE, я получаю все значения как X. Это не проверка равенства, это просто присвоение первого значения из освещенной функции .
Например, даже если я даю случайную строку ('asdfgh') внутри условия проверки (хотя это и ложь), но все же ему присваивается первое значение 'X'.
df = df.withColumn("TYPE",
((Column) when(df.col("CODE").$eq$bang$eq("asdfgh"),(functions.lit("X")))
.when(df.col("CODE").$eq$bang$eq("YELLOW"),(functions.lit("X")))
.when(df.col("CODE").$eq$bang$eq("GREEN"),(functions.lit("Y"))))
.otherwise(functions.lit("N")).alias("TYPE"));
Результат совпадает с приведенным выше результатом
ПРИМЕЧАНИЕ. Столбец «ТИП» - это новый столбец, который я хочу добавить в df, а «КОД» - это существующий столбец.
Пожалуйста, помогите исправить ошибку. логи c