Как создать DataFrame из итератора mapPartitions? - PullRequest
0 голосов
/ 26 мая 2019

У меня есть DataFrame со столбцом id.Я хотел бы сделать некоторые вычисления для строк для каждого идентификатора (не только для агрегирования) и вывести новый DataFrame с одной строкой на идентификатор, содержащий результаты вычислений.

Я пытаюсь сделать это путем повторного разбиенияна идентификатор, а затем с помощью mapPartitions:

df.repartition(col("id")).mapPartitions(iter => {
    val dfSubset = // iter to DataFrame?
    // Computations on dfSubset
})

Но как создать DataFrame из iter?Цель состоит в том, чтобы затем выполнить вычисления в DataFrame dfSubset, содержащей все строки для идентификатора.

РЕДАКТИРОВАТЬ:

repartition(col("id")) не будет создавать 1 раздел на id.Мы должны использовать groupBy("id") вместо.

1 Ответ

1 голос
/ 26 мая 2019

Вам нужно выполнить groupBy для id, а затем определить собственную Определяемую пользователем совокупную функцию .Если вам нужны все столбцы, вы можете создать структуру из указанных столбцов и перейти к своей статистической функции.

df
.groupBy("id")
.agg(myUdaf(struct(df.columns.filter(_ != "id").map(col(_)):_*)).as("result")).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...