首页 > 解决方案 > 在 AWS Glue 上使用 mergeDynamicFrame 的问题

问题描述

我需要在 Glue 上的两个动态帧之间进行合并。我尝试使用 mergeDynamicFrame 函数,但我不断收到相同的错误:

AnalysisException:“无法解析' id'给定输入列:[];;\n'Project ['id]\n+- LogicalRDD false\n”

现在,我有 2 个 DF:df_1(id,col1,salary_src)和 df_2(id,name,salary)

我想通过“id”列将 df_2 合并到 df_1 中。

df_1 = glueContext.create_dynamic_frame.from_catalog(......)
df_2 = glueContext.create_dynamic_frame.from_catalog(....)

merged_frame = df_1.mergeDynamicFrame(df_2, ["id"]) 

applymapping1 = ApplyMapping.apply(frame = merged_frame, mappings = [("id", "long", "id", "long"), ("col1", "string", "name", "string"), ("salary_src", "long", "salary", "long")], transformation_ctx = "applymapping1")

datasink2 = glueContext.write_dynamic_frame.from_options(....)

作为测试,我尝试从两个 DF(salary 和salary_src)中传递一列,并且错误为:

AnalysisException:“无法解析' salary_src'给定输入列:[id,name,salary];\n'Project [salary#2,'salary_src]\n+- LogicalRDD [id#0,name#1,salary#2],假\n"

在这种情况下,它似乎可以识别 df_2 中的列(id、name、salary).. 但是如果我只通过其中一列,甚至是第三列,它就会一直失败

标签: dataframeamazon-s3pysparkaws-glueaws-glue-spark

解决方案


它似乎不是 mergeDynamicFrame 问题。

根据您提供的信息,您的 df1、df2 或两者似乎都没有正确读取数据并返回一个空的动态帧,这就是为什么您有一个空的输入列列表“输入列:[]”

如果您从 s3 读取数据,则必须先爬取数据,然后才能使用glueContext.create_dynamic_frame.from_catalog.

您还可以在创建 dynamic_frame 之后df1.show()df1.printSchema()之后将其作为故障排除步骤,以确保在合并之前正确读取数据。


推荐阅读