【问题标题】:Load S3 Data into AWS SageMaker Notebook将 S3 数据加载到 AWS SageMaker Notebook
【发布时间】:2026-01-15 07:15:02
【问题描述】:

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

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

提前感谢您的任何建议。

【问题讨论】:

    标签: python amazon-web-services amazon-s3 machine-learning amazon-sagemaker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        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)
        

        【讨论】:

        • 为什么要导入boto3?
        • 为什么需要这个角色? (见我对下面问题的回答)
        【解决方案4】:

        在最简单的情况下,您不需要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。这是在 Permissions > IAM role 的配置步骤中完成的

        【讨论】:

        • 使用该解决方案,您可以避免凭证问题,这正是我想要的,谢谢。
        • 我收到超时或访问被拒绝——我在文件和存储桶之间有一个文件夹,所以将它添加到存储桶的末尾或文件的开头——我正在使用 root 访问,并且不认为我对这个桶有任何保护吗?这个(执行角色)是否需要 IAM?
        • 知道了——删除 execution_role() 修复了它——很棒的电话。我希望有这样的东西可用:)
        【解决方案5】:

        您还可以使用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))
        

        【讨论】:

        • 我想知道与其他方式相比有什么优点/缺点
        • @Hack-R 优点是您可以在整个代码中使用 python 文件指针接口/对象。缺点是该对象按文件操作,这可能不会提高性能。
        • @Ben 感谢您的回答;但是它对我不起作用。我收到此错误:AttributeError: type object 'Image' has no attribute 'open'。你能分享你为Image 使用的库或任何其他细节吗?谢谢!
        • 没关系,我刚刚想通了:from IPython.display import display; from PIL import Image。在那之后,上面的工作很好。谢谢!
        【解决方案6】:

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

        import awswrangler as wr
        
        df = wr.s3.read_csv(path="s3://...")
        

        【讨论】:

          【解决方案7】:

          此代码示例用于从 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)
          

          【讨论】:

            【解决方案8】:

            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
            

            【讨论】: