AWS Glue和增量CSV重复数据删除

时间:2018-07-24 18:59:41

标签: apache-spark aws-glue

我每天要向S3发送csv文件,这些文件每个月都是递增的。因此,file1包含第1天的数据,file2包含第1天和第2天的数据,依此类推,等等。每天我想对该数据运行ETL并将其写到不同的S3位置,以便我可以用Athena进行查询没有重复的行存在。本质上,我只想查询聚合数据的最新状态(这只是向S3发送的最新文件的内容)。

我不认为书签会起作用,因为增量传递将以前文件中的数据包含在内,因此会产生重复。我知道如果我在源存储桶中的所有文件上运行,都可以转换为数据框并删除这样的重复项:

spark_df = resolvechoice2.toDF()
spark_df = spark_df.dropDuplicates()

但这似乎为我增加了很多处理,以便每次对源表中的所有数据运行ETL。

基本工作流程将是这样的,新文件将被交付,或者使用Lambda来启动AWS Glue Job,后者处理该文件的内容,然后替换输出存储桶的内容。输出桶按年份和月份进行分区。

最简单的方法是只启用书签并在每次运行时删除输出存储桶中的所有内容吗?

2 个答案:

答案 0 :(得分:0)

如果文件位于单独的文件夹中,则可以使用Athena的EXTERNAL TABLE,每天指向当前分区(例如,使用Lambda): -删除指向昨天文件夹的分区 -添加指向今天文件夹的分区 -在月底,您将分区指向最后一天(包含整个月的数据)。

这样,您不需要任何重复数据删除过程,只需管理Athena分区即可。

答案 1 :(得分:0)

此答案可能会为您提供帮助,它几乎正是您要寻找的内容:Pyspark read delta/upsert dataset from csv files,但它只是在事物的“传入”方面进行,而不是在数据库中已存在时进行。您还可以考虑导入何时导入数据的时间戳记:Adding timestamp column in importing data in redshift using AWS Glue Job