使用resolveChoice转换类型后返回空DataFrame求助
问题分析与解决方案
问题重现
使用resolveChoice转换嵌套字段的数据类型为double,代码如下:
resolved_data = Get_Data_From_Dynamic_Frame_node1655725248083.resolveChoice(specs = [("items[].dimensions[].item.height.value", "cast:double")]).resolveChoice(specs = [("items[].dimensions[].item.length.value", "cast:double")]).resolveChoice(specs = [("items[].dimensions[].item.width.value", "cast:double")]).resolveChoice(specs = [("items[].dimensions[].item.weight.value", "cast:double")])
转换后将Dynamic Frame转为Data Frame,发现count()返回0,无数据写入S3。数据为嵌套结构:items数组 → dimensions数组 → item对象 → height/length/width/weight字段 → value子字段。
可能原因及修复方案
JSON路径不匹配
确认路径与实际数据结构完全一致,包括字段大小写、嵌套层级。比如若实际数据中dimensions是Dimensions,路径就会匹配失败,导致resolveChoice过滤所有数据。非数值/空值导致转换失败
默认情况下,cast:double会丢弃无法转换的行(比如value是字符串或null)。可以通过添加参数保留数据:resolved_data = Get_Data_From_Dynamic_Frame_node1655725248083.resolveChoice( specs = [ ("items[].dimensions[].item.height.value", "cast:double"), ("items[].dimensions[].item.length.value", "cast:double"), ("items[].dimensions[].item.width.value", "cast:double"), ("items[].dimensions[].item.weight.value", "cast:double") ], option="keep_null" # 保留空值行 # 或用 option="coerce" 将非数值转为null )链式调用
resolveChoice的风险
每次resolveChoice返回新的Dynamic Frame,若前一次调用已过滤数据,后续调用无数据可用。建议将所有规则合并到一次调用中,避免多次操作的意外过滤。上游节点无数据
先执行Get_Data_From_Dynamic_Frame_node1655725248083.show(),确认原始Dynamic Frame本身有数据,排除上游节点未输出数据的问题。
内容的提问来源于stack exchange,提问作者Nabeel Khan Ghauri
相关产品推荐
相关产品推荐

