SPARK 2.2最佳读取分区的镶木文件



我的镶木quet数据文件按国家/地区分区。

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
...

使用SPARK 2.X读取此数据的最佳方法是阻止Spark扫描整个数据集的最佳方法?我有几个选择:

  1. 只需使用过滤器:

    filter("(country = "USA" AND asOfDate >= "2016-01-01" AND asOfDate <= "2016-03-31") OR (....)")
    
  2. 手动构造目录,并将每个子目录传递给镶木木读:

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

选项2非常乏味,但是我不确定选项1是否会导致Spark扫描所有目录中的所有文件。

更新:这不是重复的,因为另一个问题是关于修剪的,而这是关于如何通过SPARK API最好地读取分区的Parquet文件的同时。

绝对1。

您可以通过在数据集的查询上使用.explain(extended = true)自己看到(或 直接在Spark UI SQL页面中)查看您的阅读情况。您想查找下降谓词。俯卧撑意味着在存储时进行评估,因此这将读取所需的数据。

更多详细信息:https://jaceklaskowski.gitbooks.io/mastering-apache-park/spark/spark-sql-optimizer-pushdownpredicate.html

您可以将数据存储在按日期和国家/地区分区的蜂巢表中。

这些文件将存储在单独的文件夹中,但是Hive Metastore将为您管理

相关内容

  • 没有找到相关文章

最新更新