我正在使用 Glue 书签来处理数据。我的工作是每天安排的,但也可以“手动”启动。由于我使用书签,有时胶水作业可以在没有新数据要处理的情况下启动,然后读取的数据帧为空。在这种情况下,我想好好地结束我的工作,因为它没有什么关系。 我试过:
if df.rdd.isEmpty():
job.commit()
sys.exit(0)
但是,我的工作因
SystemExit: 0
错误终止。
如何圆满结束工作?
仅使用
os._exit()
在 Glue 版本 3.0 中不起作用
要在满足某些条件后正常退出作业,请使用:
import os
import sys
.
. # Your Glue Job Code
.
logger.info("Existing job gracefully...") # Or a simple print; print("...")
job.commit() # Only necessary if you are loading data from s3 and you have job bookmarks enabled.
os._exit(0) # Using a 0 status code throws no exception so your job completes with a succeeded status.
但是,如果您想退出并出现错误,请使用:
sys.exit("Error Message...") # this will exit with an error message that will be displayed on the Glue UI -- Run Details --, and the job would have a status of failed.
经过一些测试,我从@Glyph的回答发现:
在 C 级别立即终止,并且不执行解释器的任何正常拆卸。os._exit()
这正是我一直在寻找的。最终的解决方案是:
import os
if df.rdd.isEmpty():
job.commit()
os._exit()
if df.rdd.isEmpty():
raise Exception(f"Procedure failed, stopping Glue job.")
引发错误对我有用并退出,但会导致“失败”粘合作业状态。就我而言,我希望它失败。