将S3数据加载到AWS SageMaker Notebook中

A55*_*h55 15 python machine-learning amazon-s3 amazon-web-services amazon-sagemaker

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

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

提前感谢任何建议.

小智 27

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)
Run Code Online (Sandbox Code Playgroud)

  • 为什么要导入boto3? (6认同)
  • 你为什么需要这个角色?(见我对下面问题的回答) (4认同)

iva*_*ler 27

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

import pandas as pd

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

pd.read_csv(data_location)
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*tan 8

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


Cir*_*les 7

您还可以使用您的存储桶作为文件系统访问 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))
Run Code Online (Sandbox Code Playgroud)


Pra*_*bey 5

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