在 AWS Glue 中附加负载

Append load in AWS Glue

我需要对 S3 存储桶执行追加加载。

  1. 每天都有新的 .gz 文件转储到 S3 位置,粘附爬虫会读取数据并在数据目录中更新它。
  2. Scala AWS Glue 作业运行并仅过滤当天的数据。
  3. 以上过滤后的数据按照一定规则进行转换,创建分区动态数据框(即年、月、日)级别。

现在我需要将此动态数据帧写入包含前一天所有分区的 S3 存储桶。事实上,我只需要将一个分区写入 S3 bucket.Currently 我正在使用下面的一段代码将数据写入 S3 存储桶。

// Write it out in Parquet for ERROR severity   
    glueContext.getSinkWithFormat(
    connectionType = "s3",
    options = JsonOptions(Map("path" -> "s3://some s3 bucket location", 
    "partitionKeys" -> Seq("partitonyear","partitonmonth","partitonday"))),
     format = "parquet").writeDynamicFrame(DynamicFrame(dynamicDataframeToWrite.toDF().coalesce(maxExecutors), glueContext)) 

我不确定上面的代码是否会执行追加加载,或者 not.Is 有没有办法通过 AWS 胶水库来实现相同的目的?

您的脚本会将新的数据文件附加到适当的分区。因此,如果您只处理今天的数据,那么它将在 path 下创建一个新的数据分区。例如,如果今天是 2018-11-28,它将在 s3://some_s3_bucket_location/partitonyear=2018/partitonmonth=11/partitonday=28/ 文件夹中创建新数据对象。

如果您尝试将数据写入现有分区,则 Glue 将附加新文件并且不会删除现有对象。但是,如果 运行 一个作业多次处理相同的数据,这可能会导致重复。