如何判断Python脚本运行在Glue Job环境还是Jupyter Notebook中
Glue ETL运行环境自动识别解决方案
以下几种方案均可实现环境自动判断,脚本导出后无需手动修改即可直接部署到Glue Job运行。
方案1:异常捕获法(最稳妥,兼容性最高)
核心逻辑:Glue Job运行时会自动传入--JOB_NAME等预设参数,调用getResolvedOptions不会报错;而Notebook开发环境没有这些参数,调用会抛出异常,直接捕获异常跳过对应逻辑即可。
完整代码示例:
import sys from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job SC = SparkContext.getOrCreate() GC = GlueContext(SC) job = None # 自动识别环境执行初始化 try: args = getResolvedOptions(sys.argv, ['JOB_NAME']) job = Job(GC) job.init(args['JOB_NAME'], args) print("当前运行在Glue Job环境,初始化完成") except Exception: print("当前运行在开发环境,跳过Glue Job初始化逻辑")
优点:
- 适配所有版本的Glue运行环境,不需要维护额外判断规则
- 代码导出后可直接部署,无需任何修改
- 兼容性最高,不会因为自定义参数或环境变量修改出现误判
方案2:参数特征判断
核心逻辑:Glue Job运行时sys.argv会自动携带--JOB_NAME参数,直接判断参数是否存在即可。
代码示例:
is_glue_job = '--JOB_NAME' in sys.argv if is_glue_job: args = getResolvedOptions(sys.argv, ['JOB_NAME']) job = Job(GC) job.init(args['JOB_NAME'], args)
优点:逻辑直观,没有异常捕获的额外开销
注意事项:如果在Notebook中手动给sys.argv添加了--JOB_NAME参数会导致判断失效,适合没有自定义修改sys.argv的场景。
方案3:环境变量判断
核心逻辑:Glue Job运行时会自动注入多个专属环境变量,比如AWS_GLUE_JOB_RUN_ID、AWS_GLUE_JOB_NAME,直接判断环境变量是否存在即可。
代码示例:
import os is_glue_job = os.getenv('AWS_GLUE_JOB_RUN_ID') is not None if is_glue_job: args = getResolvedOptions(sys.argv, ['JOB_NAME']) job = Job(GC) job.init(args['JOB_NAME'], args)
优点:不受sys.argv修改影响,判断逻辑更独立。
内容的提问来源于stack exchange,提问作者Maurice
相关产品推荐
相关产品推荐

