gpt4 book ai didi

apache-spark - Spark查找日期分区列的最大值

转载 作者:行者123 更新时间:2023-12-04 14:14:27 24 4
gpt4 key购买 nike

我有一个按以下方式分区的 Parquet :

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。

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

谢谢。

最佳答案

执行@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)
这将完成列表中的所有工作,而无需将任何内容加载到内存中,直到找到您想要加载的内容为止。

关于apache-spark - Spark查找日期分区列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61818650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com