我已经设置了一个收集事件数据的Spark 1.3.1应用程序.其中一个属性是名为'occurrence'的时间戳.我打算将事件数据划分为文件存储区中的镶木地板文件,并根据文档(https://spark.apache.org/docs/1.3.1/sql-programming-guide.html#partition-discovery)表示基于时间的值不仅仅支持string和int,所以我将日期分为Year,Month,Day值并按如下方式分区
events
|---occurredAtYear=2015
| |---occurredAtMonth=07
| | |---occurredAtDay=16
| | | |---<parquet-files>
...
Run Code Online (Sandbox Code Playgroud)
然后我从根路径/事件加载镶木地板文件
sqlContext.parquetFile('/var/tmp/events')
Run Code Online (Sandbox Code Playgroud)
文件说:
'Spark SQL将自动从路径中提取分区信息'
但是我的查询
SELECT * FROM events where occurredAtYear=2015
Run Code Online (Sandbox Code Playgroud)
悲惨地说火花无法解决'happenAtYear'
我可以看到事件的所有其他方面的模式,并可以对这些属性进行查询,但printSchema根本没有列出schemaAtYear/Month/Day?我错过了让分区正常工作的原因.
干杯
所以事实证明我按照说明过于精确,实际上我正在编写镶木地板文件
/var/tmp/occurredAtYear=2015/occurredAtMonth=07/occurredAtDay=16/data.parquet
Run Code Online (Sandbox Code Playgroud)
'data.parquet'还在下面创建了一个带有镶木地板文件的另一个目录,我应该将镶木地板文件保存到
/var/tmp/occurredAtYear=2015/occurredAtMonth=07/occurredAtDay=16
Run Code Online (Sandbox Code Playgroud)
现在所有工作都正确地发现了架构.
| 归档时间: |
|
| 查看次数: |
2037 次 |
| 最近记录: |