如何读取 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)

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

如何从表中获取最新的分区,克服配置单元排列分区的限制?

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

 year=2019/month=2/day=27

而不是

year=2019/month=2/day=3

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

您可以从SHOW PARTITIONS获得最大分区数

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

我不会依赖位置依赖性,但如果你要这样做,我至少会有 year=2019/月=2/day=03。

我将依靠分区修剪和SQL通过SQL语句。我不确定您是否正在使用ORC,PARQUET等,但是分区修剪应该是一个问题。

例如

 val df = sparkSession.sql(""" select max(partition_col)
                                 from randomtable 
                           """)
 val maxVal = df.first().getString(0) // this as sql result is a DF

另请参阅 https://mapr.com/blog/tips-and-best-practices-to-take-advantage-of-spark-2-x/

最新更新