Как объединить два или более столбцов в один? - PullRequest
0 голосов
/ 28 января 2019

У меня есть потоковый Dataframe, который я хочу вычислить min и avg по некоторым столбцам.

Вместо того, чтобы получать отдельные результирующие столбцы min и avg после применения операций, яхочу объединить минимальный и средний выходные данные в один столбец.

Фрейм данных выглядит следующим образом:

+-----+-----+
|  1  |  2  |           
+-----+-----+-
|24   |  55 |
+-----+-----+
|20   |  51 |
+-----+-----+

Я думал, что для этого я использую кортеж Scala, но это непохоже, работает:

val res = List("1","2").map(name => (min(col(name)), avg(col(name))).as(s"result($name)"))

Весь используемый код:

val res = List("1","2").map(name => (min(col(name)),avg(col(name))).as(s"result($name)"))

val groupedByTimeWindowDF1 = processedDf.groupBy($"xyz", window($"timestamp", "60 seconds"))
  .agg(res.head, res.tail: _*) 

Я ожидаю, что результат после применения математических операций min и avg будет:

+-----------+-----------+
|  result(1)|  result(2)|           
+-----------+-----------+
|20 ,22     |  51,53    |
+-----------+-----------+

Как мне написать выражение?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Использование struct стандартная функция:

struct (colName: String, colNames: String *): столбец

struct (cols: Column *): Column

Создает новый столбец структуры, который состоит из нескольких входных столбцов.

Это дает вам значения, а также имена (столбцов).

val res = List("1","2").map(name => 
  struct(min(col(name)), avg(col(name))) as s"result($name)")
  ^^^^^^ HERE

Сила struct можно увидеть, если вы хотите сослаться на одно поле в структуре и можете использовать имя (не индекс).

q.select("structCol.name")
0 голосов
/ 28 января 2019

То, что вы хотите сделать, это объединить значения нескольких столбцов в один столбец.Для этого вы можете использовать функцию array.В этом случае это будет:

val res = List("1","2").map(name => array(min(col(name)),avg(col(name))).as(s"result($name)"))

Что даст вам:

+------------+------------+
|   result(1)|   result(2)|
+------------+------------+
|[20.0, 22.0]|[51.0, 53.0]|
+------------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...