【问题标题】:List files in directory on AWS S3 with pyspark/python使用 pyspark/python 列出 AWS S3 目录中的文件
【发布时间】: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'

不过,pysparkSQLContext.read.parquet 很好理解:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.parquet('s3://datastore/L2/parquet')

为什么它在SQLContext 中有效而在os.listdir 中无效?我可以从哪里开始消除我的困惑?除了“获得 CS 学士学位”之外的任何回复都会有所帮助。

【问题讨论】:

    标签: python amazon-s3 pyspark


    【解决方案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 这样的东西会有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2017-10-27
      • 1970-01-01
      • 2011-12-23
      • 2012-10-22
      • 2022-01-23
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多