从PySpark中的s3子目录读取数据

问题描述 投票:0回答:3

我想从 S3 存储桶中读取所有 parquet 文件,包括子目录中的所有文件(这些实际上是前缀)。

在 S3 url 中使用通配符 (*) 仅适用于指定文件夹中的文件。例如,使用此代码将仅读取

target/
文件夹下的镶木地板文件。

df = spark.read.parquet("s3://bucket/target/*.parquet")
df.show()

假设我的 s3 存储桶中有这样的结构:

"s3://bucket/target/2020/01/01/some-file.parquet"
"s3://bucket/target/2020/01/02/some-file.parquet"

上面的代码会引发异常:

pyspark.sql.utils.AnalysisException: 'Path does not exist: s3://mailswitch-extract-underwr-prod/target/*.parquet;'

如何从 s3 存储桶的子目录中读取所有 parquet 文件?

为了运行我的代码,我将 AWS Glue 2.0 与 Spark 2.4 和 python 3 结合使用。

apache-spark parquet aws-glue pyspark
3个回答
5
投票

如果您想读取目标文件夹下的所有 parquet 文件

"s3://bucket/target/2020/01/01/some-file.parquet"
"s3://bucket/target/2020/01/02/some-file.parquet"

你可以做

df = spark.read.parquet("bucket/target/*/*/*/*.parquet")

缺点是您需要知道镶木地板文件的深度。


0
投票

这对我有用:

df = spark.read.parquet("s3://your/path/here/some*wildcard")

0
投票

对于像我这样寻找“如何使用 PySpark 读取 s3 存储桶中的所有文件?”答案的人,答案(按照 OP 的示例)就是

df = spark.read.parquet("s3://bucket/target/")
© www.soinside.com 2019 - 2024. All rights reserved.