Есть ли способ заставить пользовательский источник данных запускать новый файл при достижении предела размера файла?

#java #scala #apache-spark

#java #scala #apache-spark

Вопрос:

Мы создаем инструмент в spark для обработки терабайт данных транзакций и создания отчета в формате JSON. Существует жесткое требование ограничить размер любого отдельного файла JSON, наряду с другими конкретными требованиями, касающимися JSON. Чтобы справиться с требованиями к форматированию JSON, мы создали пользовательский класс источника данных (который расширяет JsonFileFormat, поставляемый с Spark).

Однако я не могу найти никакой документации или спецификаций API, чтобы указать ограничения на создание файла или размер файла. Похоже, что все это управляется на уровне ниже, где у меня есть какой-либо контроль.

Это правда, и если нет, кто-нибудь знает, как разделить файл, когда он достигнет определенного размера?

 Dataset<Row> dataframe = ...

dataframe.write()
  .format('com.company.custom.datasource')
  .options(...)
  .save('hdfs://host:port/path/to/directory');
  

В идеале у нас должен быть writer, который сохраняет данные раздела в файл в формате JSON, но как только мы наберем определенное количество байтов, он закроет этот файл и запустит новый. Даже при обработке того же раздела.

В качестве альтернативы, если бы был какой-то способ узнать, сколько байтов находится в разделе, мы могли бы выполнить повторное разделение заранее.