AWS Glue如何通过ResolveChoice将空数组强制转换为整数数组类型?
解决方案
ResolveChoice不可行的原因
ResolveChoice仅用于处理同一字段存在多种数据类型的冲突场景(例如同字段部分行是int、部分行是string),空数组被推断为array<null>不属于多类型冲突范畴,因此cast:array(int)类的配置无法生效。DynamicFrame原生实现方案
可以通过DynamicFrame自带的map算子完成类型转换,全程不需要切换为Spark DataFrame,示例代码如下:
from awsglue.dynamicframe import DynamicFrame # 假设raw_dyf为加载JSON得到的原始DynamicFrame processed_dyf = raw_dyf.map( lambda record: { **record.asDict(), # 将myemptyarray转换为int类型数组,兼容空数组和非空数组场景 "myemptyarray": [int(item) for item in record["myemptyarray"]] if record["myemptyarray"] else [] } )
- 验证转换结果
执行processed_dyf.printSchema()可查看转换后的Schema,输出如下:
root |-- myemptyarray: array (nullable = true) | |-- element: integer (containsNull = true)
补充说明
- 若需转换为其他元素类型的数组,只需替换示例中
int()为对应类型的转换函数即可 - 该方案不影响数组已有有效元素的正常读取,性能和Spark原生转换基本持平
内容的提问来源于stack exchange,提问作者Alejandro Arévalo
相关产品推荐
相关产品推荐

