val peoplePartitioned = spark.read.format("orc").load("peoplePartitioned")
peoplePartitioned.createOrReplaceTempView("peoplePartitioned")
spark.sql("SELECT * FROM peoplePartitioned WHERE age = 20")
这里提供了更详细的信息 如果对查询运行explain(true),也可以在逻辑计划中看到这一点:
spark.sql("SELECT * FROM peoplePartitioned WHERE age = 20").explain(True)
1条答案
按热度按时间oogrdqng1#
你说的是分区修剪。是spark支持它spark在指定分区过滤器时自动忽略读取的大数据。
当一个表中的数据被分割到多个逻辑分区时,分区修剪是可能的。每个分区对应于分区列的特定值,并作为子目录存储在hdfs的表根目录中。在适用的情况下,只查询表中所需的分区(子目录),从而避免不必要的i/o
在对数据进行分区之后,当在 predicate 中引用分区列时,后续查询可以省略大量的i/o。例如,以下查询将自动定位并加载peoplepartitioned/age=20/下的文件,并忽略所有其他文件:
这里提供了更详细的信息
如果对查询运行explain(true),也可以在逻辑计划中看到这一点:
它将显示spark读取的分区