通过AWS Glue可视化编辑器转CSV为Parquet时数据类型全转为字符串的问题
解决AWS Glue可视化编辑器转CSV到Parquet丢失数值类型的问题
1. 手动指定源表Schema(最稳妥的办法)
Glue自动推断CSV schema时,经常因为空值、格式混乱把数值类型识别成字符串。别等它自动猜,直接手动定义正确的Schema:
- 点开可视化编辑器里的数据源节点(连接S3 CSV的节点),进入Schema编辑界面
- 把每个被标成
string的数值字段,改成对应的int、double、long类型 - 注意:要是CSV里有脏数据(比如数值列混了文字),后续任务会报错,得先清洗数据——用Filter节点筛掉脏数据,或者用Map节点做类型转换兜底
2. 调整Glue爬虫的推断配置(针对分区数据)
如果你的源表是Glue爬虫生成的,修改爬虫的推断设置:
- 进入Glue爬虫的配置页面,找到Schema推断选项
- 开启“启用列值推断”,把采样比例拉高点(比如设为100%,确保覆盖所有分区的数据)
- 重新运行爬虫生成准确的Schema,再回到可视化编辑器使用这个更新后的表
3. 添加ApplyMapping节点强制转换类型
要是手动改Schema还不行,就在可视化编辑器里插个ApplyMapping节点硬转:
- 把ApplyMapping拖到数据源和Parquet输出节点中间
- 在节点配置里,为每个数值字段设置转换规则:比如把源字段的
string映射成目标字段的int/double - 对应的脚本代码参考(可视化界面直接选类型即可,无需手写):
ApplyMapping.apply(frame = datasource0, mappings = [ ("id", "string", "id", "int"), ("price", "string", "price", "double"), ("quantity", "string", "quantity", "long") ], transformation_ctx = "applymapping1")
4. 检查CSV文件的格式一致性
- 确保所有分区的CSV里,同一列格式统一:数值列不能既有数字又有文字(比如"123"和"N/A"),空值要用统一格式(比如空串或
NULL) - 要是有混合格式的列,先在Glue里处理:用Filter节点筛掉无效数据,或者用Map节点的
cast函数尝试转换,转换失败的标记后过滤
5. 验证Parquet输出的Schema
任务跑完后,用Athena查询Parquet表的Schema,确认类型是否正确:
DESCRIBE TABLE your_parquet_table;
要是类型还是错的,回到Glue的目标表配置,检查输出节点的Schema是否和转换后的一致
内容的提问来源于stack exchange,提问作者Bajarng Muthe
相关产品推荐
相关产品推荐

