我有一些数据以这种方式分区:
/data/year=2016/month=9/version=0
/data/year=2016/month=10/version=0
/data/year=2016/month=10/version=1
/data/year=2016/month=10/version=2
/data/year=2016/month=10/version=3
/data/year=2016/month=11/version=0
/data/year=2016/month=11/version=1
使用此数据时,我只想加载每个月的最后一个版本。
一个简单的方法是做load("/data/year=2016/month=11/version=3")而不是做load("/data")。
此解决方案的缺点是会丢失诸如year和之类的分区信息month,这意味着无法再应用基于年或月的操作。
是否可以要求 Spark 只加载每个月的最后一个版本?你会怎么做?
嗯,Spark 支持谓词下推,因此如果您提供filter以下load,它只会读入满足 中条件的数据filter。像这样:
spark.read.option("basePath", "/data").load("/data").filter('version === 3)
Run Code Online (Sandbox Code Playgroud)
并且您可以保留分区信息:)
| 归档时间: |
|
| 查看次数: |
4343 次 |
| 最近记录: |