Spark: перераспределение по ключу - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь вывести записи, используя следующий код:

spark.createDataFrame(asRow, struct)
      .write
      .partitionBy("foo", "bar")
      .format("text")
      .save("/some/output-path")

У меня нет проблем, когда данные маленькие. Однако, когда я обрабатываю ввод ~ 600 ГБ, я записываю около 290 тыс. Файлов, включая небольшие файлы на раздел. Есть ли способ, которым мы могли бы контролировать количество выходных файлов на раздел? Потому что сейчас я пишу много маленьких файлов, и это нехорошо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Наличие большого количества файлов - ожидаемое поведение, поскольку каждый раздел (в результате чего все вычисления, которые вы выполняли до записи) будет записывать в запрашиваемые разделы соответствующие файлы

Если вы хотите избежать того, что вам нужно переделить перед записью:

spark.createDataFrame(asRow, struct)
      .repartition("foo","bar")
      .write
      .partitionBy("foo", "bar")
      .format("text")
      .save("/some/output-path")
0 голосов
/ 02 мая 2018

У вас есть несколько файлов на раздел, потому что каждый узел записывает вывод в свой собственный файл. Это означает, что единственный способ иметь только один файл на раздел - переразбить данные перед записью. Обратите внимание, что это будет очень неэффективно, поскольку перераспределение данных приведет к перемешиванию ваших данных.

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