解决方法是使用AWS Glue的数据目录来定义模式,而不是依赖于自动检测。以下是一个使用数据目录定义模式的代码示例:
import boto3
# 创建Glue客户端
glue_client = boto3.client('glue')
# 定义CSV文件的数据目录
csv_data_catalog = {
'Type': 'CSV',
'Columns': [
{'Name': 'column1', 'Type': 'string'},
{'Name': 'column2', 'Type': 'int'},
{'Name': 'column3', 'Type': 'double'}
],
'Delimiter': ','
}
# 创建数据目录
response = glue_client.create_table(
DatabaseName='your_database_name',
TableInput={
'Name': 'your_table_name',
'StorageDescriptor': {
'Columns': csv_data_catalog['Columns'],
'Location': 's3://your_bucket/your_path/',
'InputFormat': 'org.apache.hadoop.mapred.TextInputFormat',
'OutputFormat': 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat',
'SerdeInfo': {
'SerializationLibrary': 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe',
'Parameters': {
'field.delim': csv_data_catalog['Delimiter']
}
}
},
'TableType': 'EXTERNAL_TABLE'
}
)
print(response)
上述代码示例中,需要替换以下参数:
your_database_name
:您的数据库名称。your_table_name
:您的表格名称。s3://your_bucket/your_path/
:CSV文件所在的S3存储桶路径。然后,您可以使用AWS Glue Crawler来识别该数据目录并将其用作模式。
请注意,这是一种手动定义模式的方法。如果您希望使用自动检测模式,请确保CSV文件的格式正确,并且列之间的分隔符正确。