如何在Apache Spark中对分区进行排序

时间:2019-07-10 03:48:38

标签: dataframe apache-spark-sql rdd natural-sort

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

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

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

2 个答案:

答案 0 :(得分:0)

我不会依赖位置依赖,但是如果您这样做,我至少会有year = 2019 / month = 2 / day = 0 3。

我将依赖通过SQL语句进行分区修剪和SQL。我不确定您是否使用ORC,PARQUET等,但是应该对分区进行修剪。

例如

 val df = sparkSession.sql(""" select max(partition_col)
                                 from randomtable 
                           """)

 val maxVal = df.first().getString(0) // this as sql reuslt is a DF

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

答案 1 :(得分:0)

您可以从SHOW PARTITIONS

获取最大分区
spark.sql("SHOW PARTITIONS my_database.my_table").select(max('partition)).show(false)