代码之家  ›  专栏  ›  技术社区  ›  Cherry

默认情况下,aws glue处理新数据吗?

  •  3
  • Cherry  · 技术社区  · 7 年前

    看看 this 实例它从s3目录读取数据,然后写回s3文件夹。但如果我添加数据并重新运行此作业会怎么样?我是对的,aws胶水读写 全部的 又是数据?或者它检测(如何?)只写新数据?

    顺便说一下,如果我从分区数据中读取数据,我必须自己指定“新到达的”分区?

    1 回复  |  直到 7 年前
        1
  •  1
  •   hoaxz    7 年前

    从这个例子中我可以看到,他们从S3中的一个爬网位置读取数据,然后每次都替换一个文件,完全重新加载所有数据。

    要仅处理新文件,您需要 Bookmarks 为您的工作启用,并确保您通过执行以下操作来提交工作:

    args = getResolvedOptions(sys.argv, [‘TempDir’,’JOB_NAME’])
    glue_context = GlueContext(SparkContext.getOrCreate()
    
    # Instantiate your job object to later commit
    job = Job(glue_context)
    job.init(args[‘JOB_NAME’], args)
    
    # Read file, if you enable Bookmark and commit at the end, this will only
    # give you new files
    dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database = db_name, table_name = tbl_name)
    
    result_dynamic_frame = # do some operations
    
    # Append operation to create new parquet files from new data
    result_dynamic_frame.toDF().write
      .mode("append")
      .parquet("s3://bucket/prefix/permit-inspections.parquet")
    
    # Commit my job so next time we read, only new files will come in
    job.commit()
    

    希望这有帮助