如何停止/退出 AWS Glue 作业 (PySpark)?

How to stop / exit a AWS Glue Job (PySpark)?

我成功地 运行 转换数据以进行预测的 AWS Glue 作业。如果达到特定条件,我想停止处理并输出状态消息(正在运行):

if specific_condition is None:
    s3.put_object(Body=json_str, Bucket=output_bucket, Key=json_path )
    return None

这会产生“语法错误:'return' 外部函数”,我试过:

if specific_condition is None:
    s3.put_object(Body=json_str, Bucket=output_bucket, Key=json_path )
    job.commit()

这不是 AWS Lambda 中的 运行,而是开始使用 Lambda 的 Glue Job(例如,start_job_run())。

[此答案可能不适用于最新的 glue job 版本,请参考 Jeremy 的答案。]

Glue Spark 作业中没有 return,job.commit() 只是向 Glue 发出作业任务已完成的信号,仅此而已,脚本在此之后继续其 运行。要在流程完成后结束您的工作,您必须:

  1. 调用sys.exit(STATUS_CODE) #状态码可以任意
  2. 在条件下有策略地编写代码,使得作业在 job.commit 之后没有任何代码行。

请注意,如果在 job.commit() 之前调用 sys.exit,胶水作业将失败。

由于@amsh 的解决方案对我不起作用,我继续寻找解决方案并发现:

os._exit() terminates immediately at the C level and does not perform any of the normal tear-downs of the interpreter.

感谢@Glyph's answer!然后你可以这样进行:

if specific_condition is None:
    s3.put_object(Body=json_str, Bucket=output_bucket, Key=json_path )
    job.commit()
    os._exit()

您的作业将会成功,并且不会因“SystemExit: 0”错误而终止。

如果您点击职位并点击您的相关职位,您将在职位状态中看到带有 运行 的 x 标记。

参考请查看https://forums.aws.amazon.com/thread.jspa?threadID=262217