Как перераспределить данные Spark в зависимости от количества строк? - PullRequest
0 голосов
/ 21 января 2019

Я написал простую программу, которая запрашивает огромную базу данных.Чтобы экспортировать мой результат, я написал эту функцию:

result.coalesce(1).write.options(Map("header" -> "true", "delimiter"  > ";")).csv(mycsv.csv)

Я использую метод coalesce, чтобы получить только один файл в качестве вывода.Проблема в том, что файл результатов содержит более миллиона строк.Итак, я не смог открыть его в Excel ...

Итак, я подумал об использовании метода (или написать свою собственную функцию с помощью цикла for), который может создавать разделы, связанные с количеством строк вмой файл.Но я понятия не имею, как мне это сделать.

Моя идея состоит в том, что если у меня будет менее миллиона строк, у меня будет один раздел.Если у меня более одного миллиона => двух разделов, 2 миллиона => 3 раздела и т. Д.

Можно ли сделать что-то подобное?

1 Ответ

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

Вы можете изменить количество разделов в зависимости от количества строк в кадре данных.

Например:

val rowsPerPartition = 1000000
val partitions = (1 + df.count() / rowsPerPartition).toInt

val df2 = df.repartition(numPartitions=partitions)

Затем запишите новый фрейм данных в CSV-файл, как и раньше.

Примечание: может потребоваться использовать repartition вместо coalesce, чтобы убедиться, что количество строк в каждом разделе приблизительно равно, см. Spark - repartition () и coalesce () .

...