49

我刚刚开始尝试使用 AWS SageMaker,并希望将 S3 存储桶中的数据加载到我的 SageMaker python jupyter 笔记本中的 pandas 数据框中进行分析。

我可以使用 boto 从 S3 中获取数据,但我想知道是否有更优雅的方法作为 SageMaker 框架的一部分在我的 python 代码中执行此操作?

提前感谢您的任何建议。

4

8 回答 8

52
import boto3
import pandas as pd
from sagemaker import get_execution_role

role = get_execution_role()
bucket='my-bucket'
data_key = 'train.csv'
data_location = 's3://{}/{}'.format(bucket, data_key)

pd.read_csv(data_location)
于 2018-05-09T02:59:50.300 回答
31

在最简单的情况下,您不需要boto3,因为您只是读取资源。
然后就更简单了:

import pandas as pd

bucket='my-bucket'
data_key = 'train.csv'
data_location = 's3://{}/{}'.format(bucket, data_key)

pd.read_csv(data_location)

但正如 Prateek 所说,请确保配置您的 SageMaker 笔记本实例以访问 s3。这是在权限 > IAM 角色的配置步骤中完成的

于 2019-05-09T13:09:04.633 回答
11

如果您在这里查看,您似乎可以在InputDataConfig中指定它。在文档中搜索“S3DataSource”( ref )。第一次命中甚至是在 Python 中,第 25/26 页。

于 2018-01-15T17:16:02.537 回答
8

您还可以使用您的存储桶作为文件系统访问s3fs

import s3fs
fs = s3fs.S3FileSystem()

# To List 5 files in your accessible bucket
fs.ls('s3://bucket-name/data/')[:5]

# open it directly
with fs.open(f's3://bucket-name/data/image.png') as f:
    display(Image.open(f))
于 2019-06-01T08:40:17.737 回答
5

请确保 Amazon SageMaker 角色附加了策略以访问 S3。它可以在 IAM 中完成。

于 2018-01-16T10:16:45.513 回答
3

您还可以使用 AWS Data Wrangler https://github.com/awslabs/aws-data-wrangler

import awswrangler as wr

df = wr.s3.read_csv(path="s3://...")
于 2020-01-14T14:17:56.863 回答
1

f-string.

import pandas as pd
bucket = 'your-bucket-name'
file = 'file.csv'
df = pd.read_csv(f"s3://{bucket}/{file}")
len(df) # print row counts
于 2021-06-16T21:03:30.417 回答
0

此代码示例用于从 S3 导入 csv 文件,在 SageMaker 笔记本上进行了测试。

使用 pip 或 conda 安装 s3fs。!pip install s3fs

import pandas as pd

my_bucket = '' #declare bucket name
my_file = 'aa/bb.csv' #declare file path

import boto3 # AWS Python SDK
from sagemaker import get_execution_role
role = get_execution_role()

data_location = 's3://{}/{}'.format(my_bucket,my_file)
data=pd.read_csv(data_location)
data.head(2)
于 2020-11-27T06:27:13.407 回答