每天上午11点,我们都会在供应商的s3存储桶中收到1个csv文件。 我在上午11:30使用Glue将此文件转换为镶木地板格式。
我已启用工作书签以不处理已处理的文件。 但是,我看到某些文件正在被重新处理,从而创建了重复文件。
我阅读了以下问题和答案AWS Glue Bookmark produces duplicates for PARQUET和AWS Glue Job Bookmarking explanation
他们对工作书签有了很好的理解,但仍然没有解决这个问题。
AWS文档说,它支持将AWS documentation用作书签的CSV文件。
想知道是否有人帮助我理解问题所在以及可能的解决方案:)
编辑:
按照Prabhakar的要求在此处粘贴示例代码。
staging_database_name = "my-glue-db"
s3_target_path = "s3://mybucket/mydata/"
"""
'date_index': date location in the file name
'date_only': only date column is inserted
'date_format': format of date
'path': sub folder name in master bucket
"""
#fouo classified files
tables_spec = {
'sample_table': {'path': 'sample_table/load_date=','pkey': 'mykey', 'orderkey':'myorderkey'}
}
spark_conf = SparkConf().setAll([
("spark.hadoop.fs.s3.enableServerSideEncryption", "true"),
("spark.hadoop.fs.s3.serverSideEncryption.kms.keyId", kms_key_id)
])
sc = SparkContext(conf=spark_conf)
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
for table_name, spec in tables_spec.items():
datasource0 = glueContext.create_dynamic_frame.from_catalog(database=database_name,
table_name=table_name,
transformation_ctx='datasource0')
resolvechoice2 = ResolveChoice.apply(frame=datasource0, choice="make_struct", transformation_ctx='resolvechoice2')
# Create spark data frame with input_file_name column
delta_df = resolvechoice2.toDF().withColumn('ingest_datetime', lit(str(ingest_datetime)))
date_dyf = DynamicFrame.fromDF(delta_df, glueContext, "date_dyf")
master_folder_path1 = os.path.join(s3_target_path, spec['path']).replace('\\', '/')
master_folder_path=master_folder_path1+load_date
datasink4 = glueContext.write_dynamic_frame.from_options(frame=date_dyf,
connection_type='s3',
connection_options={"path": master_folder_path},
format='parquet', transformation_ctx='datasink4')
job.commit()
答案 0 :(得分:0)
向AWS Support工程师讲话,她提到,她能够重现该问题,并已与Glue技术团队联系以解决该问题。
尽管如此,我迫不及待地希望他们修复该错误,并采取了不同的方法。
解决方案: