Pyspark 数据框删除 AWS Glue 脚本中的重复项

Posted

技术标签:

【中文标题】Pyspark 数据框删除 AWS Glue 脚本中的重复项【英文标题】:Pyspark dataframe remove duplicate in AWS Glue Script 【发布时间】:2021-12-29 16:47:38 【问题描述】:

我在 AWS Glue ETL 作业中有一个脚本,它在其中读取包含大量镶木地板文件的 S3 存储桶,按 key1、key2 和时间戳字段进行排序。之后,脚本会删除重复项并将单个 parquet 文件保存在其他 S3 存储桶中。

查看作业运行前的数据:

key1 key2 uploadTimestamp
0005541779 10 2021-12-29 14:54:08.753
0005541779 10 2021-12-29 15:06:05.968

进行排序和消除重复的代码:

#############################################################

tempDF = S3bucket_node1.toDF() #from Dynamic Frame to Data Frame

sortedDF = tempDF.orderBy(f.col("uploadTimestamp").desc(),"key1","key2").dropDuplicates(["key1","key2"]) #sort and remove duplicates


dynamicFrame = DynamicFrame.fromDF(sortedDF, glueContext, 'salesOrder') #back to Dynamic Frame

#############################################################

通过以下方式下单后查看此图片:

我的问题: 在输出文件中,一些数据得到了最后一个时间戳,一些数据得到了第一个。我不明白为什么它不适用于所有数据。

谢谢。

【问题讨论】:

列“key1”或列“key2”值的末尾可能有空格。 【参考方案1】:

它使用以下代码:

tempDF = S3bucket_node1.toDF()

w = Window.partitionBy("key1","key2").orderBy(f.desc("uploadTimestamp"))
df = tempDF.withColumn("rn", f.row_number().over(w)).filter("rn = 1").drop("rn")

dynamicFrame = DynamicFrame.fromDF(df, glueContext, 'dynamicFrame')

解决这个问题的技巧在这里找到: pyspark dataframe drop duplicate values with older time stamp

【讨论】:

以上是关于Pyspark 数据框删除 AWS Glue 脚本中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue pyspark UDF

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

如何从aws glue pyspark作业中的嵌套数组中提取数据

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

AWS Glue PySpark 替换 NULL

AWS Glue PySpark 无法计算记录