Apache flink 为什么env.readTextFile(…).first(10).print in Flink读取所有数据?

Apache flink 为什么env.readTextFile(…).first(10).print in Flink读取所有数据?,apache-flink,Apache Flink,当我只想在Apache Spark中获取前N条记录时,我使用: sc.textFile(路径到文件)。取(10) 它会很快返回并给我前10行文本。 当我在Apache Flink中执行类似操作时: env.readTextFile(路径到文件).first(10).print() 它将在返回结果之前完全读取所有文件。为什么会这样?Flink使用流水线(基于流的)执行模型。因此,当启动程序时,源只开始使用数据,而不知道下游操作符。因此,所有数据都会被读取,first(10)只返回10条记录 由

当我只想在Apache Spark中获取前N条记录时,我使用:

sc.textFile(路径到文件)。取(10)
它会很快返回并给我前10行文本。 当我在Apache Flink中执行类似操作时:

env.readTextFile(路径到文件).first(10).print()
它将在返回结果之前完全读取所有文件。为什么会这样?

Flink使用流水线(基于流的)执行模型。因此,当启动程序时,源只开始使用数据,而不知道下游操作符。因此,所有数据都会被读取,
first(10)
只返回10条记录


由于流水线执行模型,很难应用优化来提前停止源代码。想象一下,中间可能有过滤器、聚合等,因此源代码无法知道必须读取多少数据才能得到10条最终结果记录。

谢谢,这是有道理的。