python - 使用 pyspark/python 列出 AWS S3 上目录中的文件

标签 python amazon-s3 pyspark

所以,我是 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'

但是,pysparkSQLContext.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/

相关文章:

hadoop - Spark程序在群集上运行非常慢

python - 如何处理安装脚本中有 shebang 行的脚本?

python - 如何绘制数据帧?在 Python 中

python - reshape LSTM 的 Keras 输入

python - 数据不平衡的过度训练

python - PySpark:连接两个 Spark 数据帧时如何将列分组为列表?

c# - 如何使用 Lambda 从 SQS 中提取 S3 事件信息

java - 为什么我收到错误 ClassNotFoundException : com. amazonaws.auth.AWSCredentialsProvider?

ruby - 如何删除s3中的文件夹?

apache-spark - pyspark在数据框中用空值替换多个值