所以,我是 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
中不起作用的原因是什么?我该从哪里开始清理我的困惑呢?除了“获得计算机科学学士学位”之外的任何回复都会有所帮助。
最佳答案
因此,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会有帮助的。
关于python - 使用 pyspark/python 列出 AWS S3 上目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096378/