如何因错误而结束或失败 AWS Glue 作业?

Che*_*rry 6 scala amazon-web-services aws-glue

考虑一个 AWS Glue 作业片段:

val input = glueContext
  .getCatalogSource(database = "my_db", tableName = "my_table")
  .getDynamicFrame()
val myLimit = 10    
if (input.count() <= myLimit) {
  // end glue job here with error
}
// continue execution
Run Code Online (Sandbox Code Playgroud)

如何在错误状态下退出作业?如果我只是跳过执行,它就会以成功结束;如果我抛出异常,它就会因异常而失败。我可以调用某些东西来停止具有失败/错误状态的作业,但不引发异常吗?

更新

乍一看我可以:

val spark: SparkContext = SparkContext.getOrCreate()
val glueContext: GlueContext = new GlueContext(spark)
val jobId = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_ID").toArray)("JOB_ID")
spark.cancelJob(jobId)
Run Code Online (Sandbox Code Playgroud)

但:

  1. SparkContext来自内部框架,结束工作可能会导致不可预测(不稳定)的结果。
  2. org.apache.spark.SparkContext#cancelJob接收Int而 AWS Glue 有String JOB_ID这样的:j_aaa11111a1a11a111a1aaa11a11111aaa11a111a1111111a111a1a1aa111111a。所以不能cancelJob直接传递。

fer*_*eel 0

这被写成 pyspark,因为这是我所知道的

args = getResolvedOptions(
   sys.argv, ["TempDir", "JOB_NAME"]
)
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

if my_check() == False:
    # you can use any other exit code and glue will still report failure
    # because the job is not committed
    sys.exit(0)

do_normal_stuff()
job.commit()
Run Code Online (Sandbox Code Playgroud)

火花工作和粘合工作是不同的事情,这就是为什么你不能互换它们的 ID。