【问题标题】:How to stop / exit a AWS Glue Job (PySpark)?如何停止/退出 AWS Glue 作业 (PySpark)?
【发布时间】:2021-07-05 18:19:47
【问题描述】:

我有一个成功运行的 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())。

【问题讨论】:

    标签: amazon-web-services aws-glue aws-glue-spark


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 即使在job.commit() 之后调用sys.exit(0),您的作业也会以“SystemExit: 0”状态失败
    【解决方案2】:

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

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

    感谢@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”错误而终止。

    【讨论】:

      【解决方案3】:

      如果您单击作业并单击相关作业,您将看到一个 x 标记,表示作业状态正在运行。

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

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 2018-08-05
        • 1970-01-01
        相关资源
        最近更新 更多