Я создаю приложение, в котором пользователи могут динамически вводить операторы ifelse, и я должен применить эти условия соответственно к фрейму данных Spark. Базовая функция c ifelse определяется как
ifelse(boolean_expr, valTrue, valFalse)
, которую я читал из JSON как
[{ expression: boolean_expr , trueValue: valTrue , falseValue: valFalse }]
и должен писать в Spark как
df.withColumn("new_col", when(boolean_expr,valTrue)).otherwise(valFalse)
Все это хорошо, когда у меня простое и уникальное состояние. Однако, если есть одно или несколько вложенных условий, я не знаю, как продолжить синтаксический анализ содержимого JSON для вложенных условий в кадре данных. Например,
[{ expression: cond_1 , trueValue: { expression: cond_2, trueValue: "something", falseValue: "something_else"} , falseValue: "another_thing" }]
должен go к чему-то вроде
df.withColumn("new_col", when(cond_1, when(cond_2,"something").otherwise("something_else")).otherwise("another_thing")
или
[{ expression: cond_1 , trueValue: "something_true" , falseValue: { expression: cond_2, trueValue: "something", falseValue: "something_else"} }]
должен go к чему-то вроде
df.withColumn("new_col", when(cond_1, "something_true")).otherwise(when(cond_2,"something").otherwise("something_else"))
но я понятия не имею, как приступить к синтаксическому анализу JSON во что-то, что может быть реализовано в Spark. Более того, я не знаю, как я могу динамически добавлять when-otherwise
предложения в метод withcolum
.
Пожалуйста, помогите мне решить эту проблему!
Заранее спасибо.