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

bfhwhh0e  于 2021-05-24  发布在  Spark
关注(0)|答案(2)|浏览(594)

我想从s3 bucket中读取所有Parquet文件,包括子目录中的所有文件(这些实际上是前缀)。
在s3url中使用通配符(*)仅适用于指定文件夹中的文件。例如,使用此代码将只读取 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以及Python3。

xkftehaa

xkftehaa1#

这对我有用:

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

nfs0ujit2#

如果要读取目标文件夹下的所有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")

缺点是你需要知道你的Parquet文件的深度。

相关问题