Spark DataFrame, как агрегировать последовательность столбцов? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть фрейм данных, и я могу выполнить агрегирование со статическими именами столбцов, т. Е.

df.groupBy("_c0", "_c1", "_c2", "_c3", "_c4").agg(
concat_ws(",", collect_list("_c5")),
concat_ws(",", collect_list("_c6")))

И это работает нормально, но как сделать то же самое, если я получу последовательность столбцов groupby и последовательность столбцов совокупности?

Другими словами, что если у меня есть

val toGroupBy = Seq("_c0", "_c1", "_c2", "_c3", "_c4")
val toAggregate = Seq("_c5", "_c6")

и хотите выполнить вышеописанное?

1 Ответ

0 голосов
/ 03 июля 2018

Чтобы выполнить то же groupBy и агрегирование с использованием последовательностей, вы можете сделать следующее:

val aggCols = toAggregate.map(c => expr(s"""concat_ws(",", collect_list($c))"""))
df.groupBy(toGroupBy.head, toGroupBy.tail:_*).agg(aggCols.head, aggCols.tail:_*)

Функция expr принимает выражение и оценивает его в столбец. Затем варианты varargs groupBy и agg применяются к спискам столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...