我正在尝试在一个Python项目中使用AWS机器学习的批处理过程。我使用的是boto3。在响应中我得到了这个失败信息。
尝试解析架构时出错:\’无法从START_ARRAY令牌反序列化布尔值实例\n 在 [Source: java.io.StringReader@60618eb4; 行: 1, 列: 2] (通过引用链: com.amazon.eml.dp.recordset.SchemaPojo[“dataFileContainsHeader”])\
我使用的.csv文件是有效的。我知道这一点,因为它通过控制台过程工作得很好。
这是我的代码;它是一个Django模型中的函数,该模型包含要处理的文件的URL(input_file):
def create_data_source_from_s3(self): attributes = [] attribute = { "fieldName": "Var1", "fieldType": "CATEGORICAL" } attributes.append(attribute) attribute = { "fieldName": "Var2", "fieldType": "CATEGORICAL" } attributes.append(attribute) attribute = { "fieldName": "Var3", "fieldType": "NUMERIC" } attributes.append(attribute) attribute = { "fieldName": "Var4", "fieldType": "CATEGORICAL" } attributes.append(attribute) attribute = { "fieldName": "Var5", "fieldType": "CATEGORICAL" } attributes.append(attribute) attribute = { "fieldName": "Var6", "fieldType": "CATEGORICAL" } attributes.append(attribute) dataSchema = {} dataSchema['version'] = '1.0' dataSchema['dataFormat'] = 'CSV' dataSchema['attributes'] = attributes dataSchema["targetFieldName"] = "Var6" dataSchema["dataFileContainsHeader"] = True, json_data = json.dumps(dataSchema) client = boto3.client('machinelearning', region_name=settings.region, aws_access_key_id=settings.aws_access_key_id, aws_secret_access_key=settings.aws_secret_access_key) #create a datasource return client.create_data_source_from_s3( DataSourceId=self.input_file.name, DataSourceName=self.input_file.name, DataSpec={ 'DataLocationS3': 's3://' + settings.AWS_S3_BUCKET_NAME + '/' + self.input_file.name, 'DataSchema': json_data, }, ComputeStatistics=True )
有什么想法能告诉我我做错了什么吗?
回答:
删除逗号
dataSchema["dataFileContainsHeader"] = True,
这会导致Python认为你正在添加一个元组。因此,你的dataSchema实际上包含的是(True, )
而你的输出看起来像这样
{"dataFileContainsHeader": [true], "attributes": [{"fieldName": "Var1", "fieldType": "CATEGORICAL"}, {"fieldName": "Var2", "fieldType": "CATEGORICAL"}, {"fieldName": "Var3", "fieldType": "NUMERIC"}, {"fieldName": "Var4", "fieldType": "CATEGORICAL"}, {"fieldName": "Var5", "fieldType": "CATEGORICAL"}, {"fieldName": "Var6", "fieldType": "CATEGORICAL"}], "version": "1.0", "dataFormat": "CSV", "targetFieldName": "Var6"}
AWS期望的是这样的格式
"dataFileContainsHeader": true