在Spark SQL中使用目录进行分区修剪

Lun*_*ahl 5 apache-spark apache-spark-sql apache-drill

我有写在目录结构中的数据文件(在此示例中为json,但也可能是avro):

dataroot
+-- year=2015
    +-- month=06
        +-- day=01
            +-- data1.json
            +-- data2.json
            +-- data3.json
        +-- day=02
            +-- data1.json
            +-- data2.json
            +-- data3.json
    +-- month=07
        +-- day=20
            +-- data1.json
            +-- data2.json
            +-- data3.json
        +-- day=21
            +-- data1.json
            +-- data2.json
            +-- data3.json
        +-- day=22
            +-- data1.json
            +-- data2.json
Run Code Online (Sandbox Code Playgroud)

使用spark-sql创建一个临时表:

CREATE TEMPORARY TABLE dataTable
USING org.apache.spark.sql.json
OPTIONS (
  path "dataroot/*"
)
Run Code Online (Sandbox Code Playgroud)

查询表效果很好,但到目前为止,我无法使用目录进行修剪。

有没有一种方法可以将目录结构注册为分区(不使用Hive)以避免在查询时扫描整个树?假设我想比较每个月第一天的数据,并且只读取这几天的目录。

使用Apache Drill,我可以在查询期间使用目录作为谓词,dir0等等。是否可以使用Spark SQL做类似的事情?

Arn*_*-Oz 3

据我所知,分区自动发现仅适用于 SparkSQL 中的 parquet 文件。请参阅http://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery