Как выбрать части разных столбцов на основе начала столбца даты и объединения в один столбец - PullRequest
0 голосов
/ 23 сентября 2019

Мне нужно выбрать значения из разных столбцов (разные версии одного и того же столбца, например, datecol, col1_v1, col1_v2, col1_v3 ....) на основе даты начала и окончания datecol (так как каждая версия начинается и заканчивается на определенную дату) и объединить их в один столбец

Я получил дату начала и окончания в виде пары значений ключа и, используя функцию .between, я могу получить значения для каждого столбца на основе условия фильтра между условиями даты. (внутри цикла) Однако мне нужно получить все результаты в виде одного столбца.

df.withColumn("resultColumn",col("col1_v1").where(col("datecol").between(startdate,enddate))

Выше приведен цикл, в котором в зависимости от даты начала и окончания он выбирается из разных версий столбцов.,И он должен объединить результат в один столбец.

datecol     col1_v1 col1_v2 col1_v3 result
01/01/2019  11      21      31      11
02/01/2019  12      22      32      22
03/01/2019  13      23      33      33

1 Ответ

0 голосов
/ 23 сентября 2019

Вы можете использовать некоторые функции конкатенации, например, с concat_ws:

import org.apache.spark.sql.functions.concat_ws

dataframe.withColumn("resultColumn1",col("col_v1")).
  withColumn("resultColumn2", col("col_v2")).
  withColumn("resultColumn3", col("col_v3")).
  withColumn("result", concat_ws(",", dataframe.columns.filter(el => el != "date_col").
  map(c => col(c)): _*)).show()

дает:

+----------+------+------+------+-------------+-------------+-------------+--------+
|  date_col|col_v1|col_v2|col_v3|resultColumn1|resultColumn2|resultColumn3|  result|
+----------+------+------+------+-------------+-------------+-------------+--------+
|01/01/2019|    11|    21|    31|           11|           21|           31|11,21,31|
|02/01/2019|    12|    22|    32|           12|           22|           32|12,22,32|
|03/01/2019|    13|    23|    33|           13|           23|           33|13,23,33|
+----------+------+------+------+-------------+-------------+-------------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...