所以,我是AWS S3和pyspark和linux的新手。我不知道从哪里开始。这是我的问题:
在linux中,我可以发出以下命令,可以看到文件夹中的文件:
import os
os.listdir('s3://datastore/L2/parquet')
使用python做类似的事情不起作用
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
中有效并且在{{1}}中不起作用的任何原因?我在哪里可以开始清除我的困惑?除了“获得cs单身汉”之外的任何回复都会有所帮助。
答案 0 :(得分:0)
因此,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的内容会有所帮助。