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

5uzkadbs  于 2023-02-16  发布在  Apache
关注(0)|答案(2)|浏览(174)

我正在浏览Spark优化方法,遇到了各种实现优化的方法。但有两个名字吸引了我的眼球。
1.分区修剪
1.同品种器械下推
他们说:
分区修剪:
分区修剪是一种性能优化,它限制了Spark在查询时读取的文件和分区的数量。在对数据进行分区后,匹配特定分区筛选条件的查询通过允许Spark只读取目录和文件的子集来提高性能。
同品种器械下推:
Spark会尝试将数据过滤移到尽可能靠近数据源的地方,以避免将不必要的数据加载到内存中。Parquet和ORC文件在不同的数据块中维护每列的各种统计信息(例如最小和最大值)。读取这些文件的程序可以使用这些索引来确定某些块,甚至整个文件,这使得程序在处理过程中有可能跳过大部分数据。
通过阅读上述概念,它们似乎做了同样的事情,即应用满足查询中给定 predicate 的读语句(查询)。分区修剪和 predicate 下推是不同的概念还是我看待它们的方式错误?

zy1mlcev

zy1mlcev1#

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

  • Spark在委托给数据源处理文件格式之前会自己进行分区修剪。它只适用于基于文件格式的情况,因为数据源还没有分区发现的概念。
  • predicate 下推将行过滤委托给负责处理特定格式的数据源(Spark对数据源类型的术语)。 predicate 下推可用于基于文件和非基于文件的数据源,例如RDBMS和NoSQL数据库。
toe95027

toe950272#

predicate 下推是一种将过滤器或 predicate 下推到数据库管理系统的存储层的技术。这样,只从存储层检索相关数据,减少了需要处理的数据量,从而提高了查询的性能。通过下推 predicate ,数据库系统可以利用存在于存储层的任何索引或其它优化。
列修剪是一种从查询处理管道中删除不必要的列的技术。通过减少需要处理、存储在内存中以及通过网络传输的数据量,可以提高查询的性能。数据库系统确定哪些列必须基于查询,并在执行查询之前删除未使用的列。
predicate 下推和列剪枝都是现代数据库系统中用来提高查询性能和有效利用可用资源的重要优化技术。

相关问题