首页 > 解决方案 > 如何在 apache spark 中读取最新的分区

问题描述

我使用了包含查询的数据框

df : Dataframe =spark.sql(s"show Partitions $yourtablename")

现在分区的数量每天都在变化,因为它每天都在运行。

主要关心的是我需要获取最新的分区。

假设我获得了特定日期的随机表的分区,例如

year=2019/month=1/day=1
year=2019/month=1/day=10
year=2019/month=1/day=2
year=2019/month=1/day=21
year=2019/month=1/day=22
year=2019/month=1/day=23
year=2019/month=1/day=24
year=2019/month=1/day=25
year=2019/month=1/day=26
year=2019/month=2/day=27
year=2019/month=2/day=3

现在您可以看到它对分区进行排序以便之后day=1出现的功能day=10。这会产生一个问题,因为我需要获取最新的分区。

我已经设法通过使用来获取分区

val df =dff.orderby(col("partition").desc.limit(1)

但这给了我 tail -1 分区而不是最新的分区。

如何从表中获取最新的分区,以克服 hives 排列分区的限制?

所以假设在上面的例子中我需要拿起

 year=2019/month=2/day=27

并不是

year=2019/month=2/day=3

这是表中的最后一个分区。

标签: dataframeapache-spark-sqlrddnatural-sort

解决方案


您可以从中获取最大分区SHOW PARTITIONS

spark.sql("SHOW PARTITIONS my_database.my_table").select(max('partition)).show(false)

推荐阅读