从 Azure Blob 存储导入

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

本主题介绍如何使用机器学习 Studio 中的 "导入数据" 模块 (经典) ,从 Azure Blob 存储读取数据,以便您可以在机器学习试验中使用数据。

注意

适用于:仅限机器学习 Studio (经典)

可在 Azure 机器学习设计器中获取类似的拖放模块。

Azure Blob 服务用于存储大量数据,包括二进制数据。 可以使用 HTTP 或 HTTPS 从任何位置访问 Azure blob。 根据 blob 存储的类型,可能需要进行身份验证。

  • 公共 blob 可供任何人访问,也可由具有 SAS URL 的用户访问。
  • 专用 blob 需要登录名和凭据。

从 blob 存储导入要求将数据存储在使用 块 blob 格式的 blob 中。 存储在 blob 中的文件必须使用逗号分隔 ( CSV) 或制表符分隔 (TSV) 格式。 读取该文件时,记录和任何适用的属性标题将作为行加载到作为数据集的内存中。

注意

如果启用了 "需要安全传输" 选项,则 "导入数据" 模块不支持连接到 Azure Blob 存储帐户。

有关支持与机器学习一起使用的 blob 存储类型的其他限制,请参阅技术说明部分。

提示

需要导入不支持的格式的数据? 可使用 Python 或 R。请参阅 Azure AI 库:从 Azure Blob 存储加载非文本文件中的此示例

如何从 Azure blob 导入数据

我们强烈建议你在导入数据前对其进行分析,以确保架构符合预期。 导入过程扫描一些头行来确定架构,但后面的行可能包含额外的列或导致错误的数据。

使用数据导入向导

模块提供了一个新的向导,可帮助您选择存储选项,从现有订阅和帐户中选择,并快速配置所有选项。

  1. 将 " 导入数据 " 模块添加到试验中。 可以在 " 数据输入和输出 " 类别中的 "Studio (经典) 中找到该模块。

  2. 单击 " 启动导入数据向导 ",然后按照提示进行操作。

  3. 完成配置后,若要实际将数据复制到试验中,请右键单击该模块,然后选择 " 运行所选项"。

如果需要编辑现有的数据连接,则向导会加载所有以前的配置详细信息,这样就无需从头开始重新启动。

手动设置 "导入数据" 模块中的属性

以下步骤说明如何手动配置导入源。

  1. 将 " 导入数据 " 模块添加到试验中。 可以在 " 数据输入和输出 " 类别中的 "Studio (经典) 中找到此模块。

  2. 对于 "数据源",请选择Azure Blob 存储

  3. 对于 " 身份验证类型",请选择 " 公用 (SAS URL") 如果你知道该信息已作为公共数据源提供。 SAS URL 是公共访问的时间绑定 URL,可通过使用 Azure 存储实用程序生成。

    否则,选择 " 帐户"。

  4. 如果你的数据位于可以使用 SAS URL 访问的 公共 blob 中,则无需其他凭据,因为 URL 字符串包含下载和身份验证所需的所有信息。

    在 " URI " 字段中,键入或粘贴定义帐户和公共 blob 的完整 URI。

    注意

    在通过 SAS URL 访问的页面中,只能使用以下格式存储数据: CSV、TSV 和 ARFF。

  5. 如果你的数据位于 专用 帐户,则必须提供凭据,包括帐户名称和密钥。

    • 对于 " 帐户名称",请键入或粘贴包含要访问的 blob 的帐户的名称。

      例如,如果存储帐户的完整 URL 为 https://myshared.blob.core.windows.net ,则键入 myshared

    • 对于 " 帐户密钥",请粘贴与帐户关联的存储访问密钥。

      如果你不知道访问密钥,请参阅本文中的 "管理 Azure 存储帐户" 部分:关于 Azure 存储帐户

  6. 对于 容器、目录或 blob 的路径,键入要检索的特定 blob 的名称。

    例如,如果将名为data01.csv的文件上传到名为mymldata的帐户中的trainingdata容器,则该文件的完整 URL 将为: https://mymldata.blob.core.windows.net/trainingdata/data01.txt

    因此,在 容器、目录或 blob的字段路径中,你可以键入: trainingdata/data01.csv

    若要导入多个文件,您可以使用 (星号) 或 ? (问号) 的通配符 *

    例如,假设容器 trainingdata 包含多个兼容格式的文件,则可以使用以下规范读取以 data 开头的所有文件,并将它们连接到单个数据集:

    trainingdata/data*.csv

    不能在容器名称中使用通配符。 如果需要从多个容器导入文件,请使用每个容器的 " 导入数据 " 模块的单独实例,然后使用 " 添加行 " 模块合并数据集。

    注意

    如果选择了选项,请 使用缓存的结果,对容器中的文件所做的任何更改都不会触发试验中数据的刷新。

  7. 对于 " blob 文件格式",请选择一个选项来指示存储在 blob 中的数据的格式,以便机器学习可以相应地处理数据。 支持以下格式:

    • Csv:逗号分隔值 (CSV) 是用于在机器学习中导出和导入文件的默认存储格式。 如果数据已包含标题行,请确保选择 " 文件具有标题行" 选项,否则标头将被视为数据行。

      有关机器学习中使用的 CSV 格式的详细信息,请参阅 [转换为 CSV] (convert-to-csv.md

    • Tsv:制表符分隔值 (TSV) 是许多机器学习工具使用的格式。 如果数据已包含标题行,请确保选择 " 文件具有标题行" 选项,否则标头将被视为数据行。

      有关机器学习中使用的 TSV 格式的详细信息,请参阅Convert to TSV

    • ARFF:此格式支持以 Weka 工具集使用的格式导入文件。 有关详细信息,请参阅 Convert TO ARFF

    • 具有指定编码的 csv:将此选项用于可能已使用其他字段分隔符准备好的 csv 文件,如果源可能使用的字符编码不同于 utf-8,则使用此选项。 存储在 SAS URL 中的文件不支持此格式。

    • Excel:使用此选项可以从 Azure Blob 存储中存储 Excel 工作簿中读取数据。 存储在 SAS URL 中的文件不支持 Excel 格式。

  8. 对于具有特殊编码的 CSV 文件,请设置以下附加选项来控制正确导入字符:

    • 逗号分隔符格式:从用作字段分隔符的常用字符列表中进行选择,包括逗号 , 制表符和分号 ;

    • 编码格式:选择要读取的文件所使用的字符编码。 有关支持的编码的列表,请参阅 技术说明 部分。

    • 文件具有标题行:如果数据已包含标题行,请选择此选项。 否则,此标头将作为数据行导入。

  9. 对于 Excel 文件,在指定存储 Excel 文件的帐户和容器后,你必须使用以下选项指示 Excel 格式和范围或表名称:

    • 数据格式 Excel:指示数据是处于 Excel 工作表范围还是 Excel 表中。

    • Excel 工作表或嵌入表:如果选择 " Excel 工作表" 选项,请 (选项卡名称) 或工作簿中嵌入的表指定工作表的名称。 读取工作表中的所有数据;不能指定单元范围。 如果选择 " Excel 表" 选项,则必须获取表名称,而不是表名称,即使工作表上只有一个表也是如此。 若要查看表名,请在表中单击,然后在 "表工具" 选项卡中查看 "表名" 属性。

  10. 运行试验。

示例

若要了解如何在机器学习试验中使用来自 Azure Blob 存储的数据,请参阅Azure 库

  • 新闻分类示例:加载 Azure Blob 存储中的多个数据集,然后组合这些数据集。

  • 学生绩效示例:从 Azure Blob 存储中读取以 TSV 格式存储的数据。

技术说明

本部分包含实现详情、使用技巧和常见问题解答。

常见问题

是否可通过任何方式自动导入数据?

有多种方法可以获取新数据,并使用它来定期更新试验。 很多取决于源数据的来源位置,以及你喜欢用于数据移动的工具。 请参阅以下文章了解一些想法。

自动执行试验通常需要创建 web 服务,然后由任务计划程序、PowerShell 或其他自定义代码触发。

为什么在尝试从现有 blob 读取输入数据时出现错误?

有几个可能的问题:

  • Blob 使用不受支持的格式
  • 使用机器学习尚不支持的选项创建帐户本身。

格式不受支持:从 Azure Blob 存储读取时,当前机器学习要求 Blob 使用块 blob格式,这使你可以高效地上传大型 blob。 例如,如果将 CSV 文件上传到 blob 存储,则该文件将存储为块 blob。 但是,以编程方式创建 blob 文件时,可能会生成不同类型的 blob,如 AppendBlob 类型,这是不受支持的。

作为一种解决方法,我们建议使用 块 blob 类型。

重要

创建 blob 后,无法更改类型。

有关详细信息,请参阅 了解块 blob、追加 blob 和页 blob

不受支持的帐户类型:导入和导出模块只能从使用经典部署模型创建的 Azure 存储帐户读取和写入数据。 换句话说,尚不支持提供热和冷存储访问层的新 Azure Blob 存储帐户类型。 通常,在此服务选项可用之前创建的任何 Azure 存储帐户都不会受到影响。

如果需要创建新帐户以用于机器学习,请选择 "经典" 作为部署模型,或使用 "资源管理器" 和 "帐户类型",选择 "常规用途" 而不是 " Blob 存储"。

如何避免不必要地重新加载相同的数据?

如果源数据发生更改,则可以通过重新运行 导入数据来刷新数据集并添加新的数据。 但是,如果你不想在每次运行试验时从源重新读取源,请选择 " 使用缓存的结果 " 选项 TRUE。 如果将此选项设置为 "TRUE",则该模块将检查是否已使用相同的源和相同的输入选项运行了试验,如果找到了之前的运行,则使用缓存中的数据,而不是从源重新加载数据。

能否在从源中读取数据时对数据进行筛选?

在读取数据时," 导入数据 " 模块不支持筛选。

将数据加载到机器学习 Studio (经典) 后,可以使用以下工具修改数据:

  • 使用自定义 R 脚本筛选或转换数据。

  • 使用 " 拆分数据 " 模块和相对表达式或正则表达式隔离所需的数据,然后将其另存为数据集。

如果发现加载的数据超过了所需的数据,则可以通过读取新的数据集来覆盖该数据集,并指定该数据集与较旧、较大的数据一起保存。

为什么导入过程在发现尾部新行时在数据集的末尾添加了额外行?

如果 " 导入数据 " 模块遇到后跟空行或尾随新行字符的数据行,则会在表的末尾添加一个包含缺少值的额外行。

将尾随新行解释为新行的原因是: 导入数据 无法确定实际空行和用户在文件末尾按 enter 创建的空行之间的差异。

由于某些机器学习算法支持丢失的数据,因此将此行为视为 (会影响) 的结果,因此,您应该使用 " 清理缺失数据 " 来检查缺少的值,并根据需要将其删除。

在检查空行之前,您可能还需要将其他行中的最后一行与部分缺失值隔开,这可能表示源数据中的实际缺失值。 为此,可以使用 " 拆分数据" 划分数据集。 选择 " 选择 Head N 行 " 选项以读取除最后一行之外的所有行。

导入从不同地理区域加载的数据时会发生什么情况?

如果 blob 或表存储帐户与用于机器学习试验的计算节点位于不同的区域,则数据访问速度可能较慢。 此外,还需要对订阅上的数据入口和出口收费。

为什么源文件中的某些字符在标头中显示不正确?

机器学习一般支持 utf-8 编码。 如果源文件使用其他编码类型,则可能无法正确导入这些字符。

如果你在正确加载数据时遇到问题,请尝试使用“带有编码的 CSV”选项并为自定义分隔符、代码页等指定参数。

导入过程中是否有任何禁止的字符或字符发生更改?

如果属性数据包含引号或转义的字符序列,它们将通过 Microsoft Excel 中适用于此类字符的规则来处理。 所有其他字符都通过使用以下规范作为指导原则进行处理: RFC 4180

直接将本地数据集上载到机器学习的大小限制为 1.98 GB。 对于非常大的文件,将数据集添加到实验帐户可能需要很长时间才能完成。

  • 估计10分钟或更多的数据。
  • 若要优化性能,请使用 Azure ML 服务所使用的同一区域中的存储帐户。

若要上传较大的文件,最多可有几种方法:

  • 使用压缩的文件。 你可以使用压缩格式将数据集上传到 Azure ML Studio (经典) ,然后使用 "解压缩压缩数据集" 模块将数据集解压缩并保存。 压缩的数据集还可以使用 执行 R 脚本 模块解包,但性能可能会受到限制。

  • 使用快速 Azure 实用程序,如 AzCopy。 使用AzCopy之类的实用工具将数据暂存到 Microsoft Azure Blob 存储。 然后,使用 " 导入数据 " 模块将数据从 blob 存储导入到 Studio (经典) 。

    例如,下面的代码演示了用于写入 blob 存储的 AzCopy 语法。

    cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"
    .\AzCopy.exe /Source:C:\LocalFolder /Dest:https://mystorage.blob.core.windows.net/mycontainer /DestKey:MyStorageAccountKey /Pattern:myfile.csv
    

我使用指定的编码导入了 CSV 文件,但在使用此选项进行可视化时,文本显示不正确。 为什么?

对于上传的数据集,机器学习通常仅支持 utf-8。 但是, 导入数据 模块支持其他编码格式。 因此,在使用其中一种格式导入文件后,你可能会发现这些字符未正确显示。 解决方法是使用以下方法之一将编码转换为 UTF-8:

  • 将导入的数据另存为数据集。 使用保存的数据集而不是 CSV 数据 (也可能会提高性能。 )

  • 如果在 " 执行 R 脚本 " 模块中使用数据集,则可以使用如下所示的脚本强制执行正确的编码:

    dataset <- maml.mapInputPort(1)
    Encoding(dataset$city) <- "UTF-8"
    maml.mapOutputPort("dataset")
    

    然后,可以在执行 R 脚本模块的输出上使用 可视化 ,并验证是否正确显示了字符。

导入文本文件时有哪些选项? CSV 不适用于 "我的数据"。

处理和清理非结构化文本始终是一项挑战。 但是,如果您需要导入文本数据列,则 TSV 格式通常会出现更少的问题,不过您仍需要提前检查多余的制表符。

建议你查看Azure AI 库中的文本分类模板,以查看机器学习 Studio (经典) 中的文本引入和处理的示例。

CSV 文件的自定义编码

导入数据模块的早期版本不支持某些类型的有效 CSV 文件。 例如,从 Excel 导出的数据有时包含阻止正确分析该文件的字符。

为了支持更大范围的分隔符和字符格式, 导入数据 现在支持选择分隔符和编码格式。 如果你使用“带有编码的 CSV”选项,则可以更可靠、更高效地分析 CSV 文件。

可以使用以下字符编码:

类型 编码
Unicode Unicode (UTF-8)

Unicode

Unicode (UTF-32)

Unicode (UTF-7)
CJYK 繁体中文(Big5)

简体中文(GB2312)

简体中文(Mac)

简体中文(GB2312-80)

简体中文(ISO-2022)

简体中文(GB18030)

日语(JIS)

朝鲜语(ISO)

朝鲜语(Mac)
其他 西欧(Windows)

西欧语(ISO)

希伯来语(ISO-Visual)

US ASCII

提示

CSV 导入完成后,建议将导入的文件保存为数据集,以确保导入的数据在试验中使用 UTF-8 编码。

CSV 和 TSV 格式的数据类型推理

当导入数据模块从 Azure Blob 存储 中的 CSV 或 TSV 文件加载数据时,类型猜测器在源文件中查找分类或数字数据,并表示新数据集的元数据中的已发现类型。

但是,可以在加载数据后通过编辑"编辑元数据"模块中的列属性来重写类型猜测器的结果。

模块参数

常规选项

名称 范围 类型 默认 说明
数据源 列表 数据源或接收器 Azure Blob 存储 数据源可以是 HTTP、FTP、匿名 HTTPS 或 FTPS、Azure BLOB 存储中的文件、Azure 表、Azure SQL 数据库、本地 SQL Server 数据库、Hive 表或 OData 终结点。
身份验证类型 PublicOrSas/Account String 帐户 指定数据是位于可通过 SAS URL 访问的公共容器中,还是位于需要身份验证以访问的专用存储帐户中。
使用缓存的结果 TRUE/FALSE 布尔 FALSE 选择此选项可避免在运行之间加载数据

公共或 SAS - 公共存储选项

名称 范围 类型 默认 描述
URI any String HDFS Rest 终结点
文件格式 ARFF、CSV 或 TSV String CSV 选择支持的格式之一
URI 具有标题行 布尔 TRUE/FALSE TRUE 如果文件包含标题行,则为 True;如果为 False,则第一行数据用作列标题

帐户 - 专用存储选项

名称 范围 类型 默认 说明
帐户名称 any String 键入存储帐户的名称
帐户密钥 any SecureString 粘贴帐户密码
容器、目录或 Blob 的路径 any String 空值 键入容器或目录名称
Blob 文件格式 ARFF、CSV 或 TSV String CSV 选择支持的格式之一
文件有标题行 any 字符串 True Azure 存储帐户名称

Outputs

名称 类型 说明
结果数据集 数据表 包含导入数据的数据集

例外

异常 描述
错误 0027 如果两个对象必须具有相同的大小,但其大小却不相同,则会发生异常。
错误 0003 如果一个或多个输入为 null 或为空,则会发生异常。
错误 0029 如果传递的 URI 无效,则会发生异常。
错误 0030 如果无法下载文件,则会发生异常。
错误 0002 如果一个或多个参数无法分析或者无法从指定的类型转换成目标方法所需的类型,则会发生异常。
错误 0009 如果错误地指定了 Azure 存储帐户名或容器名,则会发生异常。
错误 0048 如果无法打开文件,则会发生异常。
错误 0046 如果无法在指定的路径中创建目录,则会发生异常。
错误 0049 如果无法分析文件,则会发生异常。

有关特定于工作室和经典 (模块) 的列表,请参阅机器学习代码

有关 API 异常的列表,请参阅机器学习 REST API代码

另请参阅

导入数据
导出数据
通过 HTTP 从 Web URL 导入
从配置单元查询导入
从 Azure SQL 数据库导入
从 Azure 表导入
从数据馈送提供程序导入
从本地 SQL Server 数据库导入