Spark-SQL готовит выражение when-Then с использованием цикла - PullRequest
0 голосов
/ 31 октября 2019

У меня есть кадр данных, как показано ниже

+----------+-----------+---------+-----+------+------+
|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 ().

Заранее спасибо !!

...