Pyspark 与 AWS Glue 在多个列上加入创建重复项

Posted

技术标签:

【中文标题】Pyspark 与 AWS Glue 在多个列上加入创建重复项【英文标题】:Pyspark with AWS Glue join on multiple columns creating duplicates 【发布时间】:2018-02-13 18:13:13 【问题描述】:

我在 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 具有匹配列的重复字段。

我的两个问题是:

    如何利用带有 Pyspark 的 AWS Glue 作业来连接两个表中匹配的所有列,以便在添加新字段时不存在重复的列? 这个示例调用只包含“id”列,因为我试图让它工作,但是,我想传递两个表中匹配的所有列。如何将列列表传递给此 Join.apply 调用?我知道 Pyspark 直接提供的可用方法,但是,我想知道是否有特定于 AWS Glue 作业的方法,或者我需要在 AWS Glue 中做些什么来直接利用 Pyspark 功能。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:
 joineddata = Join.apply(frame1 = table1, frame2 = table2, keys1 = ['id'], keys2 = ['id'], transformation_ctx = 'joinedData')

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

如果你有重复,试试这个:

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

【讨论】:

以上是关于Pyspark 与 AWS Glue 在多个列上加入创建重复项的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pyspark 迭代代码(用于 AWS Glue ETL 作业)

aws glue / pyspark - 如何使用 Glue 以编程方式创建 Athena 表

AWS Glue PySpark 替换 NULL

如何使用带有 PySpark 的 WHERE 子句在 AWS Glue 中查询 JDBC 数据库?

AWS Glue pyspark UDF

如何在 AWS Glue pyspark 脚本中合并两个节点