首页 > 解决方案 > “body”处的值未能满足约束:成员不得为空

问题描述

我正在尝试使用 sagemaker 端点运行预测。输入格式是逗号分隔的特征和 | 分开的观察。但是,当我尝试迭代输入数据并在每次迭代时调用端点时,如下所示:

ENDPOINT_NAME = "my_endpoint"
runtime= boto3.client('runtime.sagemaker')
results = []
for r in request_body.split('|'):
    response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                        ContentType='text/csv',
                                        Body=r)
result = json.loads(response['Body'].read().decode())
results.append(result)

我收到以下错误:

ValidationError:调用 InvokeEndpoint 操作时发生错误 (ValidationError):检测到 1 个验证错误:“body”处的值未能满足约束:成员不得为空

作为健全性检查,我跑了:

for r in request_body.split('|'):
    print(r)

我得到了我期望得到的结果:

3.0,0.0,4795.0,0.0,1.0,24.0,30.0,25.0,3.0
3.0,2.0,3818.0,0.0,3.0,10.0,22.0,11.0,11.0
5.0,0.0,3565.0,0.0,1.0,79.0,89.0,80.0,-66.0
5.0,-1.0,3227.7,0.0,0.0,16.0,17.0,17.0,1.0
5.0,0.0,3375.0,0.0,2.0,21.0,45.0,22.0,6.0...etc

这让我相信提取单独观察的逻辑是合理的,但是当我执行调用时,我得到了这个空值错误。

这个想法是得到有序的预测,以便我以后可以将它们映射到一个不属于训练特征的 id,因此不在数据集中。

先感谢您。

标签: amazon-web-servicesamazon-sagemaker

解决方案


我遇到过同样的问题。检查您是否还向端点传递了一个空的“r”。request_body.split('|') 将生成一个包含数据帧每一行的列表,但它也将包含一个空的:''


推荐阅读