AWS Glue如何将DynamicFrame列值作为新列添加至另一DynamicFrame
实现方案
核心逻辑为对第一个DynamicFrame做*行转列(Pivot)*处理,再按id字段和第二个DynamicFrame左关联,无匹配的位置会自动填充null(即要求的留空效果)。
代码实现(AWS Glue PySpark)
步骤1:将DynamicFrame转为Spark DataFrame
Glue DynamicFrame可以无缝转换为Spark DataFrame,使用Spark原生的pivot接口处理行转列效率更高:
# 假设你已通过Glue读取到两个源DynamicFrame:dyf_table1(对应表1)、dyf_table2(对应表2) df_table1 = dyf_table1.toDF() df_table2 = dyf_table2.toDF()
步骤2:对表1执行行转列操作
将name列的唯一取值转换为独立列,列值取对应value字段:
# 可选优化:提前获取所有name的唯一值,减少pivot阶段的计算开销,适合name取值固定的场景 name_unique_list = [row["name"] for row in df_table1.select("name").distinct().collect()] pivot_df = df_table1.groupBy("id")\ .pivot("name", name_unique_list)\ .agg({"value": "first"}) # 注:聚合函数用first是默认同一个id+name组合下value唯一,如果有重复值可按需替换为sum、avg等逻辑
步骤3:左连接表2获取最终结果
result_df = df_table2.join(pivot_df, on="id", how="left")
步骤4:转回Glue DynamicFrame(可选)
如果后续需要继续使用Glue的原生转换能力,可将结果转回DynamicFrame:
from awsglue.dynamicframe import DynamicFrame result_dyf = DynamicFrame.fromDF(result_df, glueContext, "result_dynamic_frame")
内容的提问来源于stack exchange,提问作者Tasho Georgiev
相关产品推荐
相关产品推荐

