以编程方式结束/退出粘合作业

问题描述 投票:0回答:3

我正在使用 Glue 书签来处理数据。我的工作是每天安排的,但也可以“手动”启动。由于我使用书签,有时胶水作业可以在没有新数据要处理的情况下启动,然后读取的数据帧为空。在这种情况下,我想好好地结束我的工作,因为它没有什么关系。 我试过:

if df.rdd.isEmpty():
    job.commit()
    sys.exit(0)

但是,我的工作因

SystemExit: 0
错误终止。

如何圆满结束工作?

python pyspark aws-glue exit aws-glue-spark
3个回答
8
投票

仅使用

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. 

3
投票

经过一些测试,我从@Glyph的回答发现:

os._exit()
在 C 级别立即终止,并且不执行解释器的任何正常拆卸。

这正是我一直在寻找的。最终的解决方案是:

import os

if df.rdd.isEmpty():
    job.commit()
    os._exit()

0
投票
if df.rdd.isEmpty():
    raise Exception(f"Procedure failed, stopping Glue job.")

引发错误对我有用并退出,但会导致“失败”粘合作业状态。就我而言,我希望它失败。

© www.soinside.com 2019 - 2024. All rights reserved.