【发布时间】:2020-08-30 01:49:53
【问题描述】:
我的镶木地板按以下方式分区:
data
/batch_date=2020-01-20
/batch_date=2020-01-21
/batch_date=2020-01-22
/batch_date=2020-01-23
/batch_date=2020-01-24
这里的分区列batch_date是日期类型。
我只想从最新日期分区中读取数据,但作为消费者,我不知道最新值是什么。
我可以通过类似的方式使用一个简单的组
df.groupby().agg(max(col('batch_date'))).first()
虽然这会起作用,但这是一种非常低效的方式,因为它涉及 groupby。
我想知道我们是否可以以更有效的方式查询最新的分区。
谢谢。
【问题讨论】:
-
也许
df.orderBy('batch_date.desc).first()? -
此解决方案不会比所示解决方案更有效。
orderBy必须对所有元素进行排序,需要对数据帧中的所有行进行洗牌。在groupBy解决方案中会找到每个数据分区的最大值,并且只对这些元素进行shuffle,然后找到所有最大值中的最大值。您不会发现任何比 group by 更有效的方法,如果您需要更快地完成它,可以使用 HDFS API 来防止火花作业。
标签: apache-spark pyspark