Spark的分区修剪和谓词下推有什么区别?

时间:2020-03-10 08:09:42

标签: apache-spark

我正在研究Spark优化方法,并遇到了各种实现优化的方法。但是有两个名字引起了我的注意。

  1. 分区修剪
  2. 谓词下推

他们说:

分区修剪:

分区修剪是一项性能优化,它限制了数量 查询时读取的文件和分区的数量。后 对数据进行分区,查询与某些分区过滤器匹配 标准通过允许Spark只读取一个子集来提高性能 目录和文件。

谓词下推:

Spark将尝试将数据过滤移到尽可能靠近源的位置 可以避免将不必要的数据加载到内存中。实木复合地板和 ORC文件在不同的块中维护有关每个列的各种统计信息 aof数据(例如最小值和最大值)。程序读取这些文件 可以使用这些索引来确定某些块,甚至整个块 文件,完全需要阅读。这使程序可以 在处理过程中跳过大部分数据。

通过阅读以上概念,它们似乎在执行满足查询中给定谓词的应用读取语句(查询)的相同操作。 分区修剪和谓词下推是不同的概念还是我看错了方向?

1 个答案:

答案 0 :(得分:1)

区别在于谁应用了优化,在何处应用了优化以及可以将其应用于哪些数据源。

  • Spark本身会应用分区修剪,然后将其委派给处理文件格式的数据源。它仅适用于基于文件的格式,因为数据源还没有分区发现的概念。

  • 谓词下推将行过滤委托给负责处理特定格式(数据类型的Spark术语)的数据源。谓词下推适用于基于文件的源和基于非文件的源,例如RDBMS和NoSQL数据库。

相关问题