使用 pyspark/python 列出 AWS S3 目录中的文件
Posted
技术标签:
【中文标题】使用 pyspark/python 列出 AWS S3 目录中的文件【英文标题】:List files in directory on AWS S3 with pyspark/python 【发布时间】:2017-03-29 14:26:24 【问题描述】:所以,我是 AWS S3 和 pyspark 和 linux 的新手。我不知道从哪里开始。这是我的问题:
在 linux 中,我可以发出以下命令,并且可以看到文件夹中的文件:
aws s3 ls 's3://datastore/L2/parquet'
用 python 做类似的事情是行不通的
import os
os.listdir('s3://datastore/L2/parquet')
报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 's3://datastore/L2/parquet'
不过,pyspark
和 SQLContext.read.parquet
很好理解:
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.parquet('s3://datastore/L2/parquet')
为什么它在SQLContext
中有效而在os.listdir
中无效?我可以从哪里开始消除我的困惑?除了“获得 CS 学士学位”之外的任何回复都会有所帮助。
【问题讨论】:
【参考方案1】:因此,AWS s3 与您操作系统的文件系统不同。 AWS s3 ls
命令和 pyspark SQLContext.read
命令执行的操作与 os.listdir
命令不同,后者不知道如何从 s3 读取内容。
要从 s3 读取内容,我建议查看 boto3 库或 s3fs 库,它是 boto3 的包装器,将 s3 视为文件系统。 boto3 中有多种选项可用于列出存储桶和存储桶中的文件。
来自the s3 docs:
在实现方面,存储桶和对象都是资源,Amazon S3 提供 API 供您管理。
如果你不知道 Linux 文件系统是如何工作的,我建议你阅读一下,也许像 this 这样的东西会有所帮助。
【讨论】:
以上是关于使用 pyspark/python 列出 AWS S3 目录中的文件的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 python boto3 列出 aws ECS 集群中的所有集群,它最多只能列出 100 个集群,我想要 300 个集群