运行Sagemaker Pipeline的ProcessingStep时如何向Python脚本传递参数
解决方法
ProcessingStep传入的job_arguments会按顺序作为命令行参数传递给你指定的Python脚本,你只需要在params.py中通过Python内置的sys模块读取命令行参数即可,修改后的代码如下:
修改后的params.py代码
# 先导入sys模块读取命令行参数 import sys def params(input_params): details = {"database": input_params[0], "table": input_params[1], "catalog": input_params[2], "earliestday": int(input_params[3]), "latestday": int(input_params[4]), "s3bucket": input_params[5], "bucketpath": input_params[6]} return details # sys.argv返回的列表第一个元素是当前脚本文件名,从第2个元素开始才是你传入的作业参数 input_params = sys.argv[1:] output_params = params(input_params) # 后续可添加你的业务逻辑,比如将output_params写入ProcessingStep配置的输出路径
拓展建议
如果后续参数数量增加、逻辑变复杂,更推荐使用Python标准库的argparse模块解析参数,可读性和可维护性更高,不会因为参数顺序错位导致错误:
- 修改
params.py的参数解析逻辑:
import argparse parser = argparse.ArgumentParser() parser.add_argument("--database", type=str) parser.add_argument("--table", type=str) parser.add_argument("--catalog", type=str) parser.add_argument("--earliestday", type=int) parser.add_argument("--latestday", type=int) parser.add_argument("--s3bucket", type=str) parser.add_argument("--bucketpath", type=str) args = parser.parse_args() details = { "database": args.database, "table": args.table, "catalog": args.catalog, "earliestday": args.earliestday, "latestday": args.latestday, "s3bucket": args.s3bucket, "bucketpath": args.bucketpath }
- 对应修改ProcessingStep的
job_arguments为键值对格式:
job_arguments = [ "--database", "ABC", "--table", "SESSION_123", "--catalog", "AwsDataCatalog", "--earliestday", "5", "--latestday", "7", "--s3bucket", "mybucket", "--bucketpath", "bucket2/tmp/athena_sagemaker" ]
内容的提问来源于stack exchange,提问作者hahilas
相关产品推荐
相关产品推荐

