你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

交互式 R 开发

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何对 Azure 机器学习工作室中的计算实例使用 R,它在 Jupyter 笔记本中运行 R 内核。

常用的 RStudio IDE 也能发挥作用。 可以在计算实例上的自定义容器中安装 RStudio 或 Posit Workbench。 但是,在 Azure 机器学习工作区中读取和写入数据时,这存在限制。

重要

本文中所示的代码适用于 Azure 机器学习计算实例。 计算实例具有成功运行代码所需的环境和配置文件。

先决条件

在工作室中的笔记本中运行 R

你将在计算实例上的 Azure 机器学习工作区中使用一个笔记本。

  1. 登录到 Azure 机器学习工作室

  2. 打开工作区(如果尚未打开)

  3. 在左侧导航栏中,选择“笔记本”

  4. 创建名为 RunR.ipynb 的新笔记本

    提示

    如果你不确定如何在工作室中创建和使用笔记本,请查看在工作区中运行 Jupyter 笔记本

  5. 选择该笔记本。

  6. 在笔记本工具栏上,确保你的计算实例正在运行。 如果未运行,现在请将它启动。

  7. 在笔记本工具栏上,将内核切换为“R”。

    Screenshot: Switch the notebook kernel to use R.

笔记本现已准备好运行 R 命令。

访问数据

可以将文件上传到工作区文件存储资源,然后在 R 中访问这些文件。但是,对于存储在 Azure 数据资产中的文件或来自数据存储的数据,必须先安装一些包。

本部分介绍如何在交互会话中,使用 Python 和 reticulate 包将数据资产和数据存储加载到 R 中。 你将使用 azureml-fsspec Python 包和 reticulate R 包将表格数据作为 Pandas 数据帧来读取。 该部分还包含一个将数据资产和数据存储读取到 R data.frame 中的示例。

若要安装这些包:

  1. 在计算实例上创建一个名为 setup.sh 的新文件。

  2. 将以下代码复制到文件中:

    #!/bin/bash
    
    set -e
    
    # Installs azureml-fsspec in default conda environment 
    # Does not need to run as sudo
    
    eval "$(conda shell.bash hook)"
    conda activate azureml_py310_sdkv2
    pip install azureml-fsspec
    conda deactivate
    
    # Checks that version 1.26 of reticulate is installed (needs to be done as sudo)
    
    sudo -u azureuser -i <<'EOF'
    R -e "if (packageVersion('reticulate') >= 1.26) message('Version OK') else install.packages('reticulate')"
    EOF
    
  3. 选择“保存并在终端中运行脚本”以运行脚本

安装脚本将处理以下步骤:

  • pip 在计算实例的默认 conda 环境中安装 azureml-fsspec
  • 根据需要安装 R reticulate 包(版本必须为 1.26 或更高)

从已注册的数据资产或数据存储中读取表格数据

对于存储到在 Azure 机器学习中创建的数据资产中的数据,请按照以下步骤将该表格文件读取到 Pandas DataFrame 或 R data.frame 中:

注意

使用 reticulate 读取文件的操作仅适用于表格数据。

  1. 确保安装了正确版本的 reticulate。 对于低于 1.26 的版本,请尝试使用较新的计算实例。

    packageVersion("reticulate")
    
  2. 加载 reticulate 并设置已在其中安装了 azureml-fsspec 的 conda 环境

    library(reticulate)
    use_condaenv("azureml_py310_sdkv2")
    print("Environment is set")
  3. 查找数据文件的 URI 路径。

    1. 首先获取工作区的句柄

      py_code <- "from azure.identity import DefaultAzureCredential
      from azure.ai.ml import MLClient
      credential = DefaultAzureCredential()
      ml_client = MLClient.from_config(credential=credential)"
      
      py_run_string(py_code)
      print("ml_client is configured")
    2. 使用此代码检索资产。 确保将 <MY_NAME><MY_VERSION> 替换为你的数据资产的名称和编号。

      提示

      在工作室左侧导航栏中选择“数据”,找到你的数据资产的名称和版本号。

      # Replace <MY_NAME> and <MY_VERSION> with your values
      py_code <- "my_name = '<MY_NAME>'
      my_version = '<MY_VERSION>'
      data_asset = ml_client.data.get(name=my_name, version=my_version)
      data_uri = data_asset.path"
    3. 运行该代码以检索 URI。

      py_run_string(py_code)
      print(paste("URI path is", py$data_uri))
  4. 使用 Pandas 读取函数将文件读取到 R 环境中

    pd <- import("pandas")
    cc <- pd$read_csv(py$data_uri)
    head(cc)

或者,可使用数据存储 URI 来访问已注册的数据存储上的其他文件,并将这些资源读取到 R data.frame 中。

  1. 在这种格式中,使用你自己的值创建数据存储 URI:

    subscription <- '<subscription_id>'
    resource_group <- '<resource_group>'
    workspace <- '<workspace>'
    datastore_name <- '<datastore>'
    path_on_datastore <- '<path>'
    
    uri <- paste0("azureml://subscriptions/", subscription, "/resourcegroups/", resource_group, "/workspaces/", workspace, "/datastores/", datastore_name, "/paths/", path_on_datastore)
    

    提示

    如果知道文件所在的数据存储,可以从 Studio UI 复制粘贴数据存储 URI,而无需记住数据存储 URI 格式:

    1. 导航到要读取到 R 中的文件/文件夹
    2. 选择它旁边的省略号(...)。
    3. 在菜单中选择“复制 URI”。
    4. 选择要复制到笔记本/脚本中的“数据存储 URI”。 请注意,必须在代码中为 <path> 创建一个变量。 Screenshot highlighting the copy of the datastore URI.
  2. 使用上述 URI 创建文件存储对象:

fs <- azureml.fsspec$AzureMachineLearningFileSystem(uri, sep = "")
  1. 读取到 R data.frame 中:
df <- with(fs$open("<path>)", "r") %as% f, {
 x <- as.character(f$read(), encoding = "utf-8")
 read.csv(textConnection(x), header = TRUE, sep = ",", stringsAsFactors = FALSE)
})
print(df)

安装 R 包

计算实例具有许多预安装的 R 包。

要安装其他包,必须显式指明位置和依赖项。

提示

创建或使用其他计算实例时,必须重新安装已经安装过的任何包。

例如,若要安装 tsibble 包,请运行以下代码:

install.packages("tsibble", 
                 dependencies = TRUE,
                 lib = "/home/azureuser")

注意

如果在 Jupyter 笔记本中运行的 R 会话中安装包,需要使用 dependencies = TRUE。 否则,不会自动安装依赖包。 还需要指定 lib 位置,以便在正确的计算实例位置进行安装。

加载 R 库

/home/azureuser 添加到 R 库路径。

.libPaths("/home/azureuser")

提示

必须更新每个交互式 R 脚本中的 .libPaths 才能访问用户安装的库。 将此代码添加到每个交互式 R 脚本或笔记本的顶部。

更新 libPath 后,像往常一样加载库。

library('tsibble')

在笔记本中使用 R

除了上述描述的问题外,还可像在任何其他环境(包括本地工作站)中那样使用 R。 在笔记本或脚本中,可以将数据读取和写入到存储笔记本/脚本的路径。

注意

  • 在交互式 R 会话中,只能写入到工作区文件系统。
  • 在交互式 R 会话中,无法与 MLflow 交互(例如记录模型或查询注册表)。

后续步骤