当我只想在 Apache Spark 中获取前 N 条记录时,我使用:
sc.textFile(path_to_files).take(10)
Run Code Online (Sandbox Code Playgroud)
它将快速返回并给我前 10 行文本。当我在 Apache Flink 中做类似的事情时:
env.readTextFile(path_to_files).first(10).print()
Run Code Online (Sandbox Code Playgroud)
它将在返回结果之前完全读取所有文件。这是为什么?
Flink 使用流水线(基于流)执行模型。因此,在启动程序时,源只是开始消费数据,不知道下游操作符。因此,所有数据都被读取并且first(10)只返回 10 条记录。
由于流水线执行模型,很难应用优化来提前停止源。想象一下,中间可能有过滤器、聚合等,所以源不知道它必须读取多少数据才能得到 10 个最终结果记录。
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |