【问题标题】:Spark SQL queries on Partitioned DataSpark SQL 查询分区数据
【发布时间】:2015-10-05 22:24:07
【问题描述】:

我已经设置了一个收集事件数据的 Spark 1.3.1 应用程序。其中一个属性是称为“occurredAt”的时间戳。我打算将事件数据分区到文件存储上的镶木地板文件中,并根据文档 (https://spark.apache.org/docs/1.3.1/sql-programming-guide.html#partition-discovery) 它表明基于时间的值不仅支持字符串和整数,因此我将日期拆分为年、月、日值和分区如下

events
  |---occurredAtYear=2015
  |   |---occurredAtMonth=07
  |   |   |---occurredAtDay=16
  |   |   |   |---<parquet-files>
  ...

然后我从根路径 /events 加载 parquet 文件

sqlContext.parquetFile('/var/tmp/events')

文档说:

'Spark SQL 会自动提取分区信息 从路径'

但是我的查询

SELECT * FROM events where occurredAtYear=2015

悲惨地说 spark 无法解决 'occuredAtYear' 失败

我可以看到事件所有其他方面的架构,并且可以对这些属性进行查询,但是 printSchema 根本没有在架构上列出发生的年份/月/日?为了使分区正常工作,我缺少什么。

干杯

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    所以事实证明我太精确地按照说明进行操作,我实际上是在将镶木地板文件写到

    /var/tmp/occurredAtYear=2015/occurredAtMonth=07/occurredAtDay=16/data.parquet
    

    “data.parquet”另外创建了一个目录,下面有 parquet 文件,我应该将 parquet 文件保存到

    /var/tmp/occurredAtYear=2015/occurredAtMonth=07/occurredAtDay=16
    

    所有现在都可以正确发现架构。

    【讨论】:

    • 嗨@vcetinick .. 你如何对镶木地板文件进行分区。请在这方面帮助我
    • Parquet 文件本身没有分区。文件夹结构推断分区。因此,在上述情况下,文件夹“occuredAtMonth=07”被自动推断为 parquet 文件中存在的列之上的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2018-08-18
    • 2016-09-27
    • 2015-08-08
    • 2019-02-18
    相关资源
    最近更新 更多