У меня есть кадр данных, как показано ниже
+----------+-----------+---------+-----+------+------+
|first_name|middle_name|last_name| dob|gender|salary|
+----------+-----------+---------+-----+------+------+
| James | | Smith|36636| M| 60000|
| Michael | Rose| |40288| M| 70000|
| Robert | | Williams|42114| |400000|
| Maria | Anne| Jones|39192| F|500000|
| Jen| Mary| Brown| | F| 0|
+----------+-----------+---------+-----+------+------+
Я хотел создать новый столбец как new_salary с диапазонами. если зарплата присутствует в этом конкретном диапазоне, я буду обозначать этот диапазон в этом новом столбце, как показано ниже
+----------+-----------+---------+-----+------+------+-------+
|first_name|middle_name|last_name| dob|gender|salary|new_sal |
+----------+-----------+---------+-----+------+------+--------+
| James | | Smith|36636| M| 60000| 0-100K |
| Michael | Rose| |40288| M| 70000| 0-100K |
| Robert | | Williams|42114| |400000|100k-1000K
| Maria | Anne| Jones|39192| F|500000|100k-1000K
| Jen| Mary| Brown| | F| 0| 0-100K |
+----------+-----------+---------+-----+------+------+--------+
``
Этот я могу решить с помощью
val df2 = df.withColumn("new_sal", when(col("salary") > 0 and col("salary") < 100k,"0-100k")when(col("salary") > 100k and col("salary") < 1000k,"100k-1000k").otherwise("Unknown"))
Но предположим, что если я хочу сгенерировать условие динамического условия из списка
List =List("0-100k","100l-1000k")
columnName = salary
list.foreach{
x => when(col(columnName) > x.split("-")(0) and col(columnName) > x.split("-")(0))
}
Есть ли способ подготовить оператор when-then, соединенный с точкой (.)? так что плохо подготовлюсь когда-то со всеми возможными диапазонами и плохо перейду к функции withColumn ().
Заранее спасибо !!