这个错误通常是因为在导入用户或项目元数据时指定了布尔类型的字段。然而,AWS Personalize不支持布尔类型的字段。要解决这个问题,您需要将布尔类型的字段转换为字符串或数字类型。
以下是转换布尔类型字段为字符串类型的示例代码:
import boto3
import json
personalize = boto3.client('personalize')
dataset_arn = "arn:aws:personalize:us-west-2:111122223333:dataset/my-dataset"
bucket_name = "my-bucket"
data = [
{"userId": "user1", "boolField": True},
{"userId": "user2", "boolField": False},
]
def write_data_to_s3(data):
file_path = "data.json"
with open(file_path, 'w') as f:
for record in data:
f.write(json.dumps(record) + '\n')
s3 = boto3.resource('s3')
s3.Bucket(bucket_name).upload_file(file_path, file_path)
def import_data_to_personalize():
job_name = "import-job-{}".format(str(uuid.uuid4()))
iam_role_arn = "arn:aws:iam::111122223333:role/my-role"
schema_definition = {
"type": "record",
"name": "MySchema",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "userId",
"type": "string"
},
{
"name": "boolField",
"type": "string"
},
],
"version": "1.0"
}
create_schema_response = personalize.create_schema(
name="my-schema",
schema=json.dumps(schema_definition)
)
schema_arn = create_schema_response['schemaArn']
create_dataset_import_job_response = personalize.create_dataset_import_job(
jobName=job_name,
datasetArn=dataset_arn,
dataSource={
"dataLocation": "s3://{}/{}".format(bucket_name, file_path)
},
roleArn=iam_role_arn,
schemaArn=schema_arn
)
dataset_import_job_arn = create_dataset_import_job_response['datasetImportJobArn']
return dataset_import_job_arn
write_data_to_s3(data)
import_data_to_personalize()
在此示例中,将“boolField”字段转换为字符串类型。然后,在模式定义中,将“boolField”字段定义为字符串类型。
您也可以将布尔类型的字段转换为数字类型。例如,将“True”转换为1,将“False”转换为0。在模式定义中,将“boolField”字段定义为整数类型。
在导入数据之前,一定要检查模式定义和数据是否匹配。否则,您可能会遇到其他导入问题。