writeAsText
的{{1}}或writeAsCsv
方法写入与工作线程一样多的文件。据我所知,这些方法只允许您指定这些文件的路径和一些格式。
出于调试和测试的目的,能够将所有内容打印到单个文件中非常有用,而无需将设置更改为具有单个工作线程。
是否有任何非过于复杂的方法来实现这一目标?我怀疑它应该可以实现一个自定义DataStream
,但不确定那个(此外,它对于看似相对简单的事情也感觉很麻烦。)
答案 0 :(得分:8)
您可以通过将并行度设置为1来实现此目的。这样,只能在一台计算机上进行写入。
writeAsText(path).setParallelism(1);
答案 1 :(得分:1)
在 Flink 1.13 中,这不再使用 writeAsText 函数完成,因为它已被弃用。
可以看出 here 现在应该使用 StreamingFileSink 类和 addSink 操作。关于将并行度设置为 1,这也是不同的(通过将 StreamExecutionEnvironment 并行度设置为 1,使用 setParallelism 方法)
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
val sink: StreamingFileSink[String] = StreamingFileSink
.forRowFormat(new Path(outPath), new SimpleStringEncoder[String]("UTF-8"))
.build()
dataStream.map(_.toString).addSink(sink)