【问题标题】:Does aws glue handle new data by default?默认情况下,aws 胶水是否处理新数据?
【发布时间】:2018-07-02 08:48:44
【问题描述】:

查看this 示例。它从 s3 目录中读取数据,然后写回 s3 文件夹。但是,如果我添加数据并重新运行该作业会怎样?我是对的,aws 胶水再次读取和写入 all 数据?或者它只检测(如何?)新数据并只写入它?

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-glue


    【解决方案1】:

    从我在该示例中可以看到,他们正在从 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()
    

    希望对你有帮助

    【讨论】:

    • 感谢您的清晰解释。但是当我尝试使用 scala 代码执行此操作时,胶水会一次又一次地读取和写入所有数据。如果能回复我的next question,那就太好了
    • 我遇到了同样的问题,即使启用了书签,作业也会再次处理所有目录数据。
    • @stochasticcrap 我很乐意帮助你。你能用你想要做什么的示例代码打开一个新问题吗?
    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2021-04-05
    • 2016-02-28
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多