gpt4 book ai didi

python - 我可以将多个文件从 S3 读取到 Spark Dataframe 中,而忽略不存在的文件吗?

转载 作者:行者123 更新时间:2023-12-02 08:59:16 25 4
gpt4 key购买 nike

我想从 S3 将多个 Parquet 文件读入数据帧。目前,我使用以下方法来执行此操作:

files = ['s3a://dev/2017/01/03/data.parquet',
's3a://dev/2017/01/02/data.parquet']
df = session.read.parquet(*files)

如果所有文件都存在于 S3 上,则此方法有效,但我想请求将文件列表加载到数据帧中,而当列表中的某些文件不存在时不会中断。换句话说,我希望 SparkSql 加载它在数据框中找到的尽可能多的文件,并返回此结果而不提示。这可能吗?

最佳答案

是的,如果您将指定输入的方法更改为 hadoop glob 模式,这是可能的,例如:

files = 's3a://dev/2017/01/{02,03}/data.parquet'
df = session.read.parquet(files)

您可以在Hadoop javadoc中阅读有关模式的更多信息。 .

但是,在我看来,这不是处理按时间(在您的情况下为天)分区的数据的优雅方式。如果您能够像这样重命名目录:

  • s3a://dev/2017/01/03/data.parquet --> s3a://dev/day=2017-01-03/data.parquet
  • s3a://dev/2017/01/02/data.parquet --> s3a://dev/day=2017-01-02/data.parquet

那么您就可以利用spark partitioning架构并通过以下方式读取数据:

session.read.parquet('s3a://dev/') \
.where(col('day').between('2017-01-02', '2017-01-03')

这种方式也会忽略空/不存在的目录。附加专栏day将出现在您的数据框中(在 Spark <2.1.0 中它将是字符串,在 Spark >= 2.1.0 中它将是日期时间),因此您将知道每个记录存在于哪个目录中。

关于python - 我可以将多个文件从 S3 读取到 Spark Dataframe 中,而忽略不存在的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710053/

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