3

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

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

这会产生“SyntaxError: 'return' outside function”,我试过:

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

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

4

3 回答 3

3

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

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

感谢@Glyph 的回答!然后,您可以通过以下方式进行:

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

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

于 2021-09-22T09:44:59.160 回答
1

[此答案可能不适用于最新的胶水作业版本,请参阅 Jeremy 的答案。]

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

  1. call sys.exit(STATUS_CODE) #状态码可以是任意
  2. 在条件下战略性地编码,这样作业在 job.commit 之后没有任何代码行。

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

于 2021-04-09T21:25:22.580 回答
0

如果您单击作业并单击您的相关作业,您将看到处于作业状态的斧头标记。

正在运行的作业状态中的 X 图像

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

于 2021-11-02T09:29:47.553 回答