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

Apache spark 从PySpark中的s3子目录读取数据,apache-spark,pyspark,parquet,aws-glue,pyspark-dataframes,Apache Spark,Pyspark,Parquet,Aws Glue,Pyspark Dataframes,我想从S3存储桶中读取所有拼花文件,包括子目录中的所有拼花文件(这些实际上是前缀) 在S3URL中使用通配符(*)仅适用于指定文件夹中的文件。例如,使用此代码将仅读取target/文件夹下的拼花地板文件 df = spark.read.parquet("s3://bucket/target/*.parquet") df.show() 假设我的s3存储桶中有这样一个结构: "s3://bucket/target/2020/01/01/some-file.parque

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

在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存储桶的子目录中读取所有拼花地板文件?

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

这对我很有用:

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

如果要读取目标文件夹下的所有拼花文件

"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")

缺点是,您需要知道拼花地板文件的深度。

当您在该路径中提供特定文件的列表时,您只需要
basePath
@苏里亚·谢哈尔脉轮回答是你需要的。谢谢。在深入研究这个问题的同时。这看起来更像是读取s3“子目录”和使用通配符的问题。我更新了原来的问题。在调查时,我发现这只适用于“此处/文件夹”正下方的文件。但对于子目录中的文件,这不起作用。我会更新我原来的问题