使用AWS Glue的Pyspark连接多个列,创建重复项

时间:2018-02-13 18:13:14

标签: amazon-web-services join amazon-s3 pyspark

我在AWS Glue中有两个表,table_1和table_2具有几乎相同的模式,但是,table_2有两个额外的列。我试图在相同的列上将这两个表连接在一起,并添加table_2唯一的列,其中“旧”数据的空值为其架构不包含这些值。

目前,我可以使用类似于:

的内容加入这两个表
joined_table = Join.apply(table_1, table_2, 'id', 'id')

其中第一个'id'是table_1中的id列,第二个'id'是table_2中的id列。此调用成功将表连接成一个,但是,生成的joined_table具有匹配列的重复字段。

我的两个问题是:

  1. 如何利用Pyspark的AWS Glue作业加入两个表中匹配的所有列,以便在添加新字段时没有重复列?
  2. 此示例调用只接受'id'列,因为我试图使其正常工作,但是,我想传入两个表中匹配的所有列。如何将列表列表传递给此Join.apply调用?我直接了解Pyspark的可用方法,但是,我想知道是否有特定于AWS Glue作业的方法,或者我是否需要在AWS Glue中做一些事情来直接利用Pyspark功能。

2 个答案:

答案 0 :(得分:2)

我发现我需要重命名table_1中的列,然后在我的Join.apply调用之后错过了对.drop_fields的调用,以从连接表中删除旧列。

此外,您可以传入列名列表,而不是单个' id'我试图在问题中使用的专栏。

答案 1 :(得分:0)

 joineddata = Join.apply(frame1 = table1, frame2 = table2, keys1 = ['id'], keys2 = ['id'], transformation_ctx = 'joinedData')

aws胶水中的联接不处理重复项。您需要转换为数据框,然后删除重复项。

如果重复,请尝试以下操作:

selectedFieldsDataFrame = joineddata.toDF()
selectedFieldsDataFrame.dropDuplicates()