有没有办法在同一数据集上执行不同的收集而不在Apache Flink中多次填充数据集? 我只想填充一次数据集并对其应用几种不同的收集。
以下代码,似乎是我想要避免的两次读取数据文件。
myDataset = env.readCsvFile(..);
DataSet<Tuple3< >> test1 = myDataset.map(new map1()).filter(new filter1());
DataSet<Tuple3< >> test2 = myDataset.map(new map2()).filter(new filter2());
List< Tuple3<>> List1 = test1.collect();
List< Tuple3<>> List2 = test2.collect();
// ...
答案 0 :(得分:0)
使用collect()
无法实现此目的。您需要添加不触发作业执行的接收器并显式启动程序。例如,您可以将结果写入文件:
myDataset = env.readCsvFile(..);
DataSet<Tuple3< >> test1 = myDataset.map(new map1()).filter(new filter1());
DataSet<Tuple3< >> test2 = myDataset.map(new map2()).filter(new filter2());
test1.writeAsCsv(<filePath1>);
test2.writeAsCsv(<filePath2>);
env.execute(); // trigger execution
请参阅有关可用接收器的文档:https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#data-sinks
之后,您需要手动将结果集从<filePathX>
读入您的客户端应用程序。