我正在研究 Spark 优化方法,并遇到了各种实现优化的方法。但有两个名字引起了我的注意。
他们说:
分区修剪:
分区修剪是一种性能优化,它限制 Spark 查询时读取的文件和分区的数量。对数据进行分区后,匹配某些分区过滤条件的查询允许 Spark 仅读取目录和文件的子集,从而提高性能。
谓词下推:
Spark 将尝试将数据过滤移至尽可能靠近源的位置,以避免将不必要的数据加载到内存中。Parquet 和 ORC 文件维护不同块 aof 数据中每列的各种统计信息(例如最小值和最大值)。读取这些文件的程序可以使用这些索引来确定是否需要读取某些块甚至整个文件。这允许程序在处理过程中潜在地跳过大部分数据。
通过阅读上述概念,它们似乎做了同样的事情,即应用满足查询中给出的谓词的读取语句(查询)。分区修剪和谓词下推是不同的概念还是我以错误的方式看待它们?
区别在于谁应用优化、在何处应用优化以及可以应用到哪些数据源。
分区修剪由 Spark 本身应用,然后再委托给处理文件格式的数据源。它仅适用于基于文件的格式,因为数据源还没有分区发现的概念。
谓词下推将行过滤委托给负责处理特定格式的数据源(Spark 的数据源类型术语)。谓词下推可用于基于文件和非基于文件的源,例如 RDBMS 和 NoSQL 数据库。
| 归档时间: |
|
| 查看次数: |
3876 次 |
| 最近记录: |