使用Azure ML CLIv2创建作业时,如何在R脚本中加载数据资产
解决Azure ML CLIv2中R作业加载uri_file数据资产的问题
问题概述
使用Azure Machine Learning CLIv2创建R机器学习作业时,无法从数据存储加载已注册的uri_file类型数据资产,不清楚如何在R脚本的optparse函数中引用该资产,也不知道如何验证数据是否成功加载。
当前配置问题
你的YAML配置存在缩进错误,inputs被错误嵌套在code下,导致AML无法识别输入参数;同时R脚本缺少数据加载和验证的逻辑。
原YAML配置(存在问题)
command: > Rscript r-source.R --data_file ${{inputs.datafile}} code: src # this is the code directory inputs: datafile: # this is a registered data asset type: uri_file path: azureml:versiontest@latest
原R脚本(存在问题)
library(optparse) parser <- OptionParser() parser <- add_option( parser, "--data_file", type = "character", action = "store", default = "" # not sure what goes here, or how to reference the data asset ) args <- parse_args(parser)
解决方案
1. 修正YAML作业配置
确保inputs与command、code同级,同时补充必要的环境和计算目标配置:
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json command: > Rscript r-source.R --data_file ${{inputs.datafile}} code: src inputs: datafile: type: uri_file path: azureml:versiontest@latest environment: # 使用官方R环境镜像,可根据你的R版本调整 image: mcr.microsoft.com/azureml/openmpi4.1.0-r4.1.3:latest compute: azureml:<你的计算目标名称> # 替换为你的AML计算目标,比如cpu-cluster
关键说明:
inputs必须处于顶层,AML才能解析并传递数据资产路径到作业中${{inputs.datafile}}会在作业运行时被替换为uri_file资产在计算目标上的本地临时路径
2. 完善R脚本的参数处理与数据加载
在optparse中设置合理的默认值(用于本地测试),并添加数据加载和验证逻辑:
library(optparse) # 初始化参数解析器 parser <- OptionParser() parser <- add_option( parser, "--data_file", type = "character", action = "store", # 本地调试时的默认路径,提交AML作业时会被自动传入的路径覆盖 default = "./local-test-data.csv", help = "Path to the input data file (auto-filled by AML for registered assets)" ) # 解析命令行参数 args <- parse_args(parser) # 1. 验证传入的路径 cat("Received data file path:", args$data_file, "\n") # 2. 加载数据(根据你的文件格式调整读取函数,比如read.table、read_excel等) tryCatch({ data <- read.csv(args$data_file) # 3. 验证数据加载结果 cat("✅ Data loaded successfully!\n") cat("- Total rows:", nrow(data), "\n") cat("- Total columns:", ncol(data), "\n") cat("- First 3 rows preview:\n") print(head(data, 3)) # 后续的机器学习逻辑... }, error = function(e) { cat("❌ Failed to load data. Error message:", e$message, "\n") stop("Data loading failed, aborting job.") })
关键说明:
default参数设置为本地测试文件路径,方便你在本地调试脚本,提交到AML时该值会被资产的临时路径覆盖- 无需额外调用Azure存储SDK,直接用R的标准读取函数加载
args$data_file即可,因为AML已经将uri_file资产下载到计算节点的本地路径 - 通过
tryCatch捕获加载错误,同时打印路径、数据维度和预览,方便在AML作业日志中验证
3. 验证数据加载状态
提交作业后,在AML工作室的作业详情页面:
- 进入日志选项卡
- 查看
stdout.log文件,里面会显示你打印的路径、数据加载成功提示和数据预览 - 如果加载失败,
stderr.log会显示错误信息,帮助排查问题
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

