在Apache Flink中,我在远程群集上运行任务。我有一个包含以下命令的任务。 我想知道,为什么Flink网络客户端在完成的工作中将我的任务视为几个不同的工作?
personRecords = env.readCsvFile("path to input file/dataset1.csv")
.lineDelimiter("\n").ignoreFirstLine()
.fieldDelimiter(",")
.includeFields("111")
.types(Integer.class, String.class, String.class);
pData = personRecords.map(new cleanerMap());
pData = pData.sortPartition(3, Order.ASCENDING).setParallelism(1);
env.setParallelism(4);
MultiKey_List = partitionedData.collect();
...
pData = p.partitionCustom(new MyPartitioner(), 3);
DataSet<Tuple2<Integer, Integer>> dPairs = pData.mapPartition(new Calc());
dPairs = dPairs.flatMap(new TC(dPairs.collect())).setParallelism(1);
env.execute();
答案 0 :(得分:3)
这是因为collect
命令会将作业的执行触发到您调用它的位置。因此,它几乎与所有其他急切评估的api调用不同。触发执行作业的另一种方法是count
。
您在collect
之后定义的所有其他接收器将在后续collect
来电时执行,或者当您致电ExecutionEnvironment.execute
时。