假设我有一个元素类型为String
的Stream。我想将流中的每个元素写入某个文件夹中的单独文件。我正在使用以下设置。
stream.writeAsText(path).setParallelism(1);
如何使该路径动态化?我什至尝试将System.nanotime()
添加到路径中以使其动态。但是它似乎仍然不起作用,所有内容都写入一个文件中。
答案 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