Apache Flink - поддерживает ли DataSet API запись вывода в отдельные разделы файла - PullRequest
0 голосов
/ 06 сентября 2018

Я использую API набора данных с Flink и пытаюсь разбить файлы паркета по ключу в моем POJO, например. Дата. Конечная цель - записать мои файлы, используя следующую файловую структуру.

/output/
    20180901/
        file.parquet
    20180902/
        file.parquet

Flink предоставляет удобный класс для переноса AvroParquetOutputFormat, как показано ниже, но я не вижу возможности предоставить ключ разделения.

HadoopOutputFormat<Void, Pojo> outputFormat = 
    new HadoopOutputFormat(new AvroParquetOutputFormat(), Job.getInstance());

Я пытаюсь найти лучший способ продолжить. Нужно ли мне писать собственную версию AvroParquetOutputFormat, которая расширяет тип hadoops MultipleOutputs, или я могу использовать API-интерфейсы Flink, чтобы сделать это для меня.

Эквивалентом в Spark будет.

df.write.partitionBy('date').parquet('base path')

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете использовать приемник BucketingSink<T> для записи данных в разделы, которые вы определили, предоставив экземпляр интерфейса Bucketer. Посмотрите DateTimeBucketer для примера. https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-filesystem/src/main/java/org/apache/flink/streaming/connectors/fs/DateTimeBucketer.java

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