AWS Glue PySpark处理DynamoDB导出数据 移除数组多余Struct后写入目标表
转换逻辑调整方案
问题根因
当前代码仅提取了lineItems数组每个元素外层的M结构,但没有对M下每个属性(price/grade等)的类型层(N/S)做扁平化处理,Glue写入DynamoDB时会自动将嵌套struct识别为Map结构,额外添加一层M包装,最终导致输出多嵌套了两层不符合要求的结构。
调整后的转换代码
def MergeLineItems(rec): a = [] for x in rec["lineItems"]: line_item_raw = x["M"] formatted_item = {} # 遍历每个属性,直接提取N/S对应的实际值,去掉多余嵌套层级 for field, type_wrapper in line_item_raw.items(): field_type, field_value = next(iter(type_wrapper.items())) formatted_item[field] = {field_type: field_value} a.append({"M": formatted_item}) rec["lineItems1"] = a return rec mapped_dyF = Map.apply(frame = Transform0, f = MergeLineItems)
效果说明
调整后生成的lineItems1结构会完全匹配DynamoDB原生的List[Map]格式要求,写入时不会额外生成多余的M嵌套,输出结果和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者Minah
相关产品推荐
相关产品推荐

