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

如何在SageMaker中将S3上的大型JSON文件读取为DataFrame并解决运行报错

报错原因与解决方法

报错原因

你遇到的sequence item 0: expected str instance, bytes found报错核心有两个:

  • 代码存在变量名大小写笔误:你提前初始化的列表变量为dflist,但循环中追加数据时写的是dfList,大小写不匹配会导致后续列表拼接异常(这不是你当前触发该报错的直接原因,但也需要修正)
  • 核心问题是pandas直接读取S3路径的JSON文件时,底层依赖的s3fs库部分版本默认以二进制模式拉取文件内容,没有自动解码为字符串,和read_json预期的字符串输入类型不匹配

解决方法

方案1:直接添加编码参数(修改量最小)

修正变量名的同时,在pd.read_json中添加encoding='utf-8'指定解码规则即可,修改后代码如下:

from sagemaker import get_execution_role
import pandas as pd

bucket = 'xxx'
data_key = 'TV.json'
data_location = 's3://{}/{}'.format(bucket, data_key)

textfilereader=pd.read_json(
   data_location,lines=True,chunksize=1000, encoding='utf-8')
dflist=[]

for df in textfilereader:
     dflist.append(df)

df=pd.concat(dflist,sort=False)

方案2:显式用文本模式打开S3文件(兼容性更强)

如果方案1依然报错,可以用s3fs库显式以文本模式打开文件,避免默认二进制模式的问题,SageMaker环境默认已预装s3fs,无需额外安装,代码如下:

from sagemaker import get_execution_role
import pandas as pd
import s3fs

bucket = 'xxx'
data_key = 'TV.json'
data_location = 's3://{}/{}'.format(bucket, data_key)

# 初始化s3文件系统,以utf-8文本模式打开文件
fs = s3fs.S3FileSystem()
dflist=[]

with fs.open(data_location, 'r', encoding='utf-8') as f:
    textfilereader=pd.read_json(f, lines=True, chunksize=1000)
    for df in textfilereader:
         dflist.append(df)

df=pd.concat(dflist,sort=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:08