关于apache spark:在AWS Glue中添加负载

Append load in AWS Glue

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

  • 每天,新的.gz文件都会被转储到S3位置,Gelen Crawler会读取数据并在数据目录中进行更新。
  • Scala AWS Glue作业将运行,并且仅过滤当天的数据。
  • 根据某些规则转换上面过滤的数据,并创建一个分区的动态数据帧(即年,月,日)级别。
  • 现在,我需要将此动态数据帧写入具有所有前一天分区的S3存储桶。实际上,我只需要向S3存储桶中写入一个分区即可。当前,我正在使用下面的代码将数据写入S3存储桶中。

    1
    2
    3
    4
    5
    6
    // 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))

    我不确定上面的代码是否会执行附加加载,是否可以通过AWS胶库实现相同的加载?


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

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