首页 > 解决方案 > Spark查找日期分区列的最大值

问题描述

我有一个按以下方式划分的镶木地板:

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。

我想知道我们是否可以以更有效的方式查询最新的分区。

谢谢。

标签: apache-sparkpyspark

解决方案


执行@pasha701 建议的方法将涉及使用所有 batch_date 分区加载整个 spark 数据帧,然后找到其中的最大值。我认为作者正在寻求一种直接查找最大分区日期并仅加载该日期的方法。一种方法是使用 hdfs 或 s3fs,并将 s3 路径的内容作为列表加载,然后找到最大分区,然后仅加载该分区。那会更有效率。

假设您使用的是 AWS s3 格式,如下所示:

import sys
import s3fs

datelist=[]
inpath="s3:bucket_path/data/"
fs = s3fs.S3FileSystem(anon=False)
Dirs = fs.ls(inpath)
for paths in Dirs:
    date=paths.split('=')[1]
    datelist.append(date)
maxpart=max(datelist)

df=spark.read.parquet("s3://bucket_path/data/batch_date=" + maxpart)

这将完成列表中的所有工作,而无需将任何内容加载到内存中,直到找到您要加载的内容。


推荐阅读