【问题标题】:What is the difference between Spark's Partition Pruning and Predicate Pushdown?Spark 的 Partition Pruning 和 Predicate Pushdown 有什么区别?
【发布时间】:2020-06-22 02:44:04
【问题描述】:

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

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

他们说:

分区修剪:

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

谓词下推:

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

通过阅读上述概念,它们似乎在做同样的事情,即应用满足查询中给出的谓词的读取语句(查询)。 分区修剪和谓词下推是不同的概念还是我看错了?

【问题讨论】:

标签: apache-spark


【解决方案1】:

区别在于谁应用优化、优化应用在哪里以及可以应用到哪些数据源。

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-25
  • 2016-08-30
  • 1970-01-01
  • 2016-05-27
  • 2014-12-30
  • 2017-04-05
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多