从 PySpark 中的 s3 子目录读取数据
Reading data from s3 subdirectories in PySpark
我想从 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.
一起使用
这对我有用:
df = spark.read.parquet("s3://your/path/here/some*wildcard")
如果要读取目标文件夹下的所有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")
缺点是您需要知道镶木地板文件的深度。
我想从 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.
一起使用这对我有用:
df = spark.read.parquet("s3://your/path/here/some*wildcard")
如果要读取目标文件夹下的所有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")
缺点是您需要知道镶木地板文件的深度。