如何只加载最后一个分区的数据

Sam*_*ane 6 apache-spark

我有一些数据以这种方式分区:

/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 只加载每个月的最后一个版本?你会怎么做?

Gle*_*olt 5

嗯,Spark 支持谓词下推,因此如果您提供filter以下load,它只会读入满足 中条件的数据filter。像这样:

spark.read.option("basePath", "/data").load("/data").filter('version === 3)
Run Code Online (Sandbox Code Playgroud)

并且您可以保留分区信息:)

  • 感谢你的回复。不幸的是,您的解决方案不适用于我的用例,因为最后一个版本可能每月有所不同。我能做的是确保最后一个版本在所有月份都是相同的,但我不喜欢这个解决方案。 (4认同)