Glue Job访问Catalog S3分区表报HadoopDataSource跳过分区错误如何解决
问题根因
你遇到的跳过分区提示确实是Glue Job Bookmark的默认行为导致的:当Bookmark功能开启时,Glue只会处理自上次Job成功运行后新增的文件,已处理过的分区内如果只是更新原有文件、没有新增文件,会被默认判定为无新数据跳过。你之前修改transformationContext的操作没有生效,是因为Bookmark的全局开关没有关闭的前提下,Glue还是会保留历史处理记录。
解决方案
方案1:直接关闭Job的Bookmark功能(最通用,满足每次拉全量的需求)
不需要修改代码,直接在Glue Job的配置页操作:
- 找到对应Glue Job,进入「作业详细信息」页
- 找到「作业书签」选项,选择「禁用」
- 保存配置后重新运行Job即可,每次运行都会拉取表下所有分区的全量数据,不会跳过任何分区
方案2:如果不能关闭全局Bookmark,修改代码强制全量扫描
如果你的Job其他逻辑需要用到Bookmark,不想全局关闭,可以在调用getCatalogSource时额外添加additionalOptions参数强制全量读取:
glueContext.getCatalogSource( database = "DB_NAME", tableName = "TABLE_NAME", redshiftTmpDir = "", transformationContext = "datasource0", # 新增下面的参数 additionalOptions = {"loadAllFiles": "true"} ).getDynamicFrame().toDF()
这个参数会让Glue忽略Bookmark的历史记录,每次都读取目标表的所有文件。
方案3:如果依赖库代码无法修改,配置Job参数强制全量加载
如果调用getCatalogSource的逻辑在依赖包里你改不了,也不想关闭全局Bookmark,可以给Job添加运行时参数:
- 进入Glue Job的「作业参数」配置
- 添加参数:
--conf,值为spark.glue.fileList.partition.files.loadAll=true - 保存后重新运行即可,这个参数会全局生效,所有CatalogSource读取都会默认拉全量文件
内容的提问来源于stack exchange,提问作者smjm
相关产品推荐
相关产品推荐

