有没有办法对同一个数据集执行不同的收集,而无需在 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();
// ...
您无法使用 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>
读取到客户端应用程序中。