You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

亚马逊S3中50GB CSV文件导入Jupyter Notebook报错的解决方法

解决Pandas读取S3 StreamingBody的ValueError问题

你遇到的这个错误确实是因为Pandas的read_csv目前没法直接处理boto3返回的StreamingBody对象,不过有好几种实用的方法可以绕开这个问题,下面给你详细说明:

方案1:将StreamingBody转换为文件对象

可以用io.StringIO(针对文本格式CSV)或者io.BytesIO(二进制格式场景)把StreamingBody包装成Pandas能识别的文件对象,代码示例如下:

import boto3
import pandas as pd
import io

session = boto3.session.Session(region_name='XXXX')
s3client = session.client('s3', config = boto3.session.Config(signature_version='XXXX'))
response = s3client.get_object(Bucket='myBucket', Key='myKey')

# 用StringIO包装StreamingBody,注意根据实际编码调整decode参数
csv_file = io.StringIO(response['Body'].read().decode('utf-8'))
names = ['id','origin','name']
dataset = pd.read_csv(csv_file, names=names)
dataset.head()

提示:如果你的CSV使用了非UTF-8编码(比如GBK),记得把decode里的参数改成对应编码。

方案2:用s3fs让Pandas直接读取S3路径

s3fs库可以让Pandas直接通过s3://格式的路径读取文件,不需要手动处理boto3客户端,代码更简洁,还支持大文件分块读取(适合你50GB的场景):
首先先安装依赖:

pip install s3fs

然后简化后的读取代码:

import pandas as pd

names = ['id','origin','name']
dataset = pd.read_csv('s3://myBucket/myKey', names=names, storage_options={
    'region_name': 'XXXX',
    'signature_version': 'XXXX'
})
dataset.head()

方案3:先下载文件到本地再读取

如果你的本地磁盘有足够存储空间,也可以先把S3文件下载到本地,再读取:

import boto3
import pandas as pd

session = boto3.session.Session(region_name='XXXX')
s3client = session.client('s3', config = boto3.session.Config(signature_version='XXXX'))

# 下载S3文件到本地
s3client.download_file('myBucket', 'myKey', 'local_csv_file.csv')

# 读取本地文件
names = ['id','origin','name']
dataset = pd.read_csv('local_csv_file.csv', names=names)
dataset.head()

注意:这个方法对于50GB的大文件来说,会占用大量本地磁盘空间,且下载耗时较长,适合小文件或本地空间充足的场景。


内容的提问来源于stack exchange,提问作者sepideh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:09:07