[英]AWS Glue Pyspark, End a job with a condition?
似乎是一項簡單的任務,但我無法找到文檔以查看是否可行。 基本上,我有一個每小時運行一次的粘合作業,並搜索一個文件夾以查看數據是否已上傳。 在某些情況下,過去一小時內沒有上傳任何數據,因此當 Glue 函數運行並看到沒有數據時,我希望它終止。 那可能嗎? 這是一些偽代碼來說明我的意思:
def fn(input):
*fetches list of data*
return (list of data)
list_of_data = fn(input)
if list_of_data is None:
Terminate Job
是的,正如 bdcloud 正確提到的,我們可以直接從 Lambda 觸發 Glue 作業。 在登陸文件夾上創建事件觸發器,並在上傳文件時觸發粘合作業。 請在此處找到 AWS Lambda 的代碼片段:
from __future__ import print_function
import json
import boto3
import time
import sys
import time
from datetime import datetime
s3 = boto3.client('s3')
glue = boto3.client('glue')
def lambda_handler(event, context):
gluejobname="<< THE GLUE JOB NAME >>"
try:
runId = glue.start_job_run(JobName=gluejobname)
status = glue.get_job_run(JobName=gluejobname, RunId=runId['JobRunId'])
print("Job Status : ", status['JobRun']['JobRunState'])
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist '
'and your bucket is in the same region as this '
'function.'.format(source_bucket, source_bucket))
raise e
我們在生產環境中進行了此設置,並在過去 1.5 年中成功運行。
謝謝,
尤瓦
您概述的偽代碼可以工作,因為我過去運行過類似的工作。
但是,我發現以這種方式使用的 Glue 作業很昂貴,因為即使您的作業運行不到一分鍾(尤其是在沒有文件的情況下),您仍需為第一個 10 分鍾的使用塊付費。
成本更高的替代方案(但更復雜,因為您將同時使用 S3 事件、SQS 和 Lambda)是執行以下操作:
上述方法將為您節省$$。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.