我有一些数据以这种方式分区:/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)
你可以保留分区信息:)
关于apache-spark - 如何只加载最后一个分区的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663066/