apache-spark - AWS Glue 和重复数据删除增量 CSV 文件
问题描述
我每天将 csv 文件交付到 S3,这些文件在本月是增量的。所以 file1 包含第 1 天的数据,file2 包含第 1 天和第 2 天的数据,等等。每天我想对该数据运行 ETL 并将其写入不同的 S3 位置,以便我可以使用 Athena 查询它没有重复的行。本质上,我只想查询聚合数据的最新状态(这只是最近交付给 S3 的文件的内容)。
我不认为书签会起作用,因为增量交付包含以前文件中的数据,因此会产生重复。我知道如果我在源存储桶中的所有文件上运行,我可以转换为数据框并删除这样的重复项:
spark_df = resolvechoice2.toDF()
spark_df = spark_df.dropDuplicates()
但这似乎会给我增加很多处理,以便每次对源表中的所有数据运行 ETL。
基本工作流程类似于交付新文件,可能使用 Lambda 启动 AWS Glue 作业,该作业仅处理该文件的内容,然后替换输出存储桶的内容。输出桶按年和月分区。
最简单的方法是在每次运行时启用书签并删除输出存储桶中的所有内容吗?
解决方案
如果您的文件位于单独的文件夹中,您可以使用 AthenaEXTERNAL TABLE
和每天指向当前分区(例如使用 Lambda): - 删除指向昨天文件夹的分区 - 添加指向今天文件夹的分区 - 在月底您将分区指向最后一个日(包含整月的数据)。
这样您就不需要任何重复数据删除过程,您只需管理您的 Athena 分区。
推荐阅读
- javascript - 反应解构
- pytorch - 如何通过 PyTorch 中的标签数量调整批处理数据
- javascript - UI渲染后如何在选择器列表中添加项目
- c# - 如何在 Asp.net MVC (C#) 中将对象从一个 ActionResult 传递到另一个 ActionResult?
- python - 我可以将 re2 库与熊猫一起使用吗?
- python - 无法在 Docker Ubuntu 主机中使用 cv2.VideoCapture(0) 打开相机
- javascript - Teams botframework 发送主动消息 REST api
- javascript - 在 iframe 标记内调用的表单的 CSS
- python - 如何隐藏在cmd中运行命令的python程序的cmd窗口?
- apache-spark - 使用代码扩展 spark 工作节点