Apache Flink-DataSet API是否支持将输出写入单个文件分区

时间:2018-09-06 12:21:57

标签: apache-flink parquet

我正在将Dataset 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类型,还是可以利用Flink API来完成此任务?

Spark中的等效项是

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

1 个答案:

答案 0 :(得分:0)

您可以使用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