如何解决从PySpark中的s3子目录读取数据
我想从S3存储桶中读取所有实木复合地板文件,包括子目录中的所有实木复合地板文件(实际上是前缀)。
在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存储桶的子目录中读取所有实木复合地板文件?
要运行我的代码,我将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")
缺点是您需要了解镶木地板文件的深度。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。