spark2.2最佳读取分区Parquet文件

jpfvwuh4  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(299)

这个问题在这里已经有答案了

spark是否支持使用Parquet文件进行分区修剪(3个答案)
三年前关门了。
我有Parquet数据文件分区的国家和日期。

sales
  country=USA
    asOfDate=2016-01-01
    asofDate=2016-01-02
  country=FR
....

我需要处理的数据,用户可以选择哪些国家的处理和每个国家的截止日期。

Country, Start Date, End Date
USA, 2016-01-01, 2016-03-31
FR, 2016-02-01, 2016-08-31
...

使用spark2.x读取这些数据的最佳方式是什么?这将阻止spark扫描整个数据集?我有几个选择:
只需使用过滤器:

filter("(country = "USA" AND asOfDate >= "2016-01-01" AND asOfDate <= "2016-03-31") OR (....)")

手动构造目录并将每个子目录传递给parquet read:

spark.read.parquet("/sales/country=USA/asOfDate=2016-01-01", ""/sales/country=USA/asOfDate=2016-01-02",...)

选项2非常乏味,但我不确定选项1是否会导致spark扫描所有目录中的所有文件。
更新:这不是重复,因为另一个问题是关于修剪,而这个问题是关于如何通过sparkapi最好地读取分区的parquet文件。

tnkciper

tnkciper1#

肯定是1。
你可以通过使用 .explain(extended = true) 在数据集的查询中(或直接在spark ui sql页中),查看读取的结果。你想找一个下推 predicate 。下推意味着在存储时求值,因此这将读取所需的数据。
更多详细信息:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-sql-optimizer-pushdownpredicate.html

huwehgph

huwehgph2#

您可以将数据存储在按日期和国家划分的配置单元表中。
这些文件将存储在不同的文件夹中,但配置单元元存储将为您管理它

相关问题