Flink:如何在使用writeFileAsText(path)写入文件时传递动态路径?

时间:2018-08-21 06:49:57

标签: java apache-flink flink-streaming

假设我有一个元素类型为String的Stream。我想将流中的每个元素写入某个文件夹中的单独文件。我正在使用以下设置。

stream.writeAsText(path).setParallelism(1);

如何使该路径动态化?我什至尝试将System.nanotime()添加到路径中以使其动态。但是它似乎仍然不起作用,所有内容都写入一个文件中。

2 个答案:

答案 0 :(得分:2)

Rolling File Sink使用自定义存储桶,或者较新的首选Streaming File Sink使用自定义BucketAssigner和RollingPolicy,在Flink中明确支持这种用例。

答案 1 :(得分:1)

您的问题是DataStream.writeAsText()一次将流的全部内容写入文件,因此您将只能得到一个文件。

看起来这将返回一个集合,您可以使用该集合将字符串输出为不同的文件。

dataStream.flatMap(new FlatMapFunction<String, String>() {
@Override
public void flatMap(String value, Collector<String> out)
    throws Exception {
    for(String word: value.split(" ")){
        out.collect(word);
    }
}
});

直接从此处的文档中获取:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html