Amazon Personalize批量推理作业输入JSON格式错误排查求助
Amazon Personalize批量推理输入格式错误原因及修复方案
错误原因分析
你的代码存在两个关键问题,导致输入格式不符合要求:
- 初始格式生成错误:使用
to_json(orient='columns')生成的是类似{"ITEM_ID":["12637","12931"]}的结构,后续替换逗号的操作会破坏JSON结构,生成非法的片段。 - 重复JSON序列化:你先后用
json.dump(items_json, f)和json.dumps(items_json)对处理后的字符串再次进行JSON序列化,导致所有特殊字符被转义——比如实际换行变成了\n,双引号变成了\",最终上传到S3的内容是一个被包裹的字符串,而非每行一个独立的JSON对象,这完全不符合批量推理要求的JSON Lines格式。
修正后的代码
# 生成符合要求的JSON Lines格式:每行一个独立的itemId JSON对象 items_json_lines = '\n'.join([f'{{"itemId": "{item}"}}' for item in items_df['ITEM_ID'][1:200]]) # 写入本地文件(可选操作) with open('items_json.json', 'w') as f: f.write(items_json_lines) # 上传至S3 import boto3 s3 = boto3.client('s3') s3.put_object( Body=items_json_lines, Bucket='bucket', Key='personalize/batch-recommendations-input/items_json.json' )
修正说明
- 直接遍历
ITEM_ID列的每个值,逐个生成{"itemId": "xxx"}格式的字符串,再用换行符连接,得到标准的JSON Lines格式。 - 不再对整个内容进行JSON序列化,直接写入原始字符串,避免转义问题。
- 上传后S3中的文件内容会是:
{"itemId": "12637"} {"itemId": "12931"} {"itemId": "13005"}
完全符合Amazon Personalize批量推理作业的输入要求。
内容的提问来源于stack exchange,提问作者MSS
相关产品推荐
相关产品推荐

