在AWS Glue中,可以通过禁用某些源的书签来提高作业的性能,特别是当源数据集很大并且不需要增量式读取时。以下是禁用一些源的书签的代码示例:
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
glueContext = GlueContext(SparkContext.getOrCreate())
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
input_table_1 = glueContext.create_dynamic_frame.from_catalog(database="source_database", table_name="source_table_1")
input_table_2 = glueContext.create_dynamic_frame.from_catalog(database="source_database", table_name="source_table_2")
disable_bookmark_options = {'jobBookmarkOption': 'job-bookmark-disable'}
input_tables = [input_table_1.toDF(), input_table_2.toDF()]
for table in input_tables:
table.write.saveAsTable('tmp_table', **disable_bookmark_options)
tmp_table = glueContext.create_dynamic_frame.from_catalog(database="default", table_name="tmp_table")
# 在此处可以对 tmp_table 进行 ETL 处理
job.commit()
在此示例中,我们首先从源数据库中动态创建了两个数据帧,即input_table_1
和input_table_2
。然后,我们将禁用书签选项存储在名为disable_bookmark_options
的字典中,并将两个数据帧转为数据框并保存到名为tmp_table
的表中。我们通过toDF()
方法将动态帧转换为DataFrame并调用saveAsTable()
方法将其写入表中。最后,我们使用create_dynamic_frame.from_catalog()
方法从现有的tmp_table
中创建动态帧。现在,我们可以对此数据帧执行任何必要的ETL操作并提交作业。