如何向AWS SageMaker端点正确发送含datetime字段的数据?
解决SageMaker AutoML端点JSON格式错误问题
问题分析
你遇到的错误有两个核心原因:
- 字段名不匹配:训练数据定义的字段是
backup_calls,但请求里写的是backup_call,少了末尾的s - JSON格式不符合AutoML端点要求:SageMaker AutoML的表格模型服务脚本(即报错里的
tabular_serve.py),要求JSON请求必须用**instances数组包裹样本**,而非单个对象结构
修正后的请求代码
单个样本请求
import boto3 import json endpoint = 'endpoint-name' runtime = boto3.Session().client('sagemaker-runtime') # 修正字段名,并按要求用instances数组包裹样本 data = { "instances": [ { "d_time": "2023-05-19 03:34:34", "hour": 3, "day_of_week": 4, "shift": 3, "backup_calls": 0 # 修正字段名 } ] } response = runtime.invoke_endpoint( EndpointName=endpoint, ContentType='application/json', Body=json.dumps(data) ) result = json.loads(response['Body'].read().decode()) print(result)
多个样本批量请求
如果需要批量发送预测请求,直接在instances数组中添加更多样本对象即可:
data = { "instances": [ { "d_time": "2023-05-19 03:34:34", "hour": 3, "day_of_week": 4, "shift": 3, "backup_calls": 0 }, { "d_time": "2023-05-20 10:15:00", "hour": 10, "day_of_week": 5, "shift": 2, "backup_calls": 1 } ] }
可选方案:CSV格式请求
AutoML端点默认也支持CSV格式,只要确保字段顺序和训练数据的列顺序一致即可:
# CSV格式请求,字段顺序需与训练数据列顺序严格匹配 csv_data = "2023-05-19 03:34:34,3,4,3,0" response = runtime.invoke_endpoint( EndpointName=endpoint, ContentType='text/csv', Body=csv_data ) result = json.loads(response['Body'].read().decode())
内容的提问来源于stack exchange,提问作者ssaran
相关产品推荐
相关产品推荐

