通过数据集导入作业导入批量记录 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过数据集导入作业导入批量记录

设置完输入数据的格式(参见数据格式指南)、将其上传到 Amazon Simple Storage Service (Amazon S3) 存储桶(参见上传到 Amazon S3 存储桶)并完成创建数据集和架构后,通过创建数据集导入作业,将批量记录导入数据集。

数据集导入作业 是一种批量导入工具,可通过 Amazon S3 存储桶中的数据填充数据集。您可以使用 Amazon Personalize 控制台、 Amazon Command Line Interface (Amazon CLI) 或 Amazon 软件开发工具包创建数据集导入任务。

如果您之前为数据集创建了数据集导入作业,则可以使用新的数据集导入作业来添加或替换现有批量数据。有关更多信息,请参阅 更新现有的批量数据

导入模式

如果您已经为数据集创建了导入任务,则可以配置 Amazon Personalize 如何添加您的新记录。为此,您需要为数据集导入任务指定导入模式。如果您尚未导入批量记录,则控制台中的 “导入模式” 字段不可用,您只能在 CreateDatasetImportJob API 操作FULL中指定。默认为完整替换。

  • 要覆盖数据集中的所有现有批量数据,请在 Amazon Personalize 控制台中选择替换现有数据,或者在 CreateDatasetImportJob API 操作中指定 FULL。这不会取代您单独导入的数据,包括实时记录的事件。

  • 要将记录附加到数据集中的现有数据,请选择添加到现有数据,或在 CreateDatasetImportJob API 操作中指定 INCREMENTAL。Amazon Personalize 会将所有具有相同 ID 的记录替换为新记录。

    注意

    要使用数据集导入作业将数据附加到物品交互数据集或操作交互数据集,您必须至少有 1000 条新的物品交互或操作交互记录。

导入批量记录(控制台)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。如果您已经导入了批量数据,则可以通过更改作业的导入模式来追加数据。

要使用 Amazon Personalize 控制台将批量记录导入数据集,请创建一个包含名称、IAM 服务角色和数据位置的数据集导入作业。

如果您刚刚在创建数据集和架构中创建了数据集,请跳至步骤 5。

导入批量记录(控制台)
  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

  2. 数据集组页面,选择您的数据集组。这时,将显示数据集组概述

  3. 在导航窗格中,选择数据集,然后选择要将批量数据导入到其中的数据集。

  4. 数据集导入作业中,选择创建数据集导入作业

  5. 如果这是您的第一个数据集导入任务,请为数据导入源选择从 S3 导入数据

  6. 对于数据集导入作业名称,为导入作业指定名称。

  7. 如果您已经导入了批量数据,请在 “导入” 模式下,选择如何更新数据集。选择替换现有数据添加到现有数据。如果这是您的第一份数据集作业,则不会显示此选项。有关更多信息,请参阅 更新现有的批量数据

  8. 数据导入源中,为数据位置指定数据文件在 Amazon S3 中的存储位置。使用以下语法:

    s3://<name of your S3 bucket>/<folder path>/<CSV filename>

    如果您的 CSV 文件位于 Amazon S3 存储桶的某个文件夹中,并且您想通过一个数据集导入作业将多个 CSV 文件上传到一个数据集,则可以指定该文件夹的路径。Amazon Personalize 仅使用您文件夹第一级中的文件,不使用任何子文件夹中的任何数据。使用以下语法,在文件夹名称后面加上 /

    s3://<name of your S3 bucket>/<folder path>/

  9. 对于 IAM 角色,选择创建新角色或使用现有角色。如果您完成了先决条件,请选择使用现有服务角色,并指定您在为 Amazon Personalize 创建 IAM 角色中创建的角色。

  10. 如果您创建了指标归因,并希望将与此作业相关的指标发布到 Amazon S3,请在将事件指标发布到 S3 中,选择发布此导入作业的指标

    如果您尚未创建指标归因并想发布此作业的指标,请选择创建指标归因,以在其他选项卡上创建新的指标归因。创建指标归因后,您可以返回此屏幕,并完成导入作业的创建。

    有关指标归因的更多信息,请参阅衡量建议的影响

  11. 对于标签,可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息,请参阅为 Amazon Personalize 资源添加标签

  12. 选择 Start import (开始导入)。数据导入作业开始,并显示控制面板概览页。当状态显示为 ACTIVE 时,数据集导入完成。将数据导入 Amazon Personalize 数据集后,您可以对其进行分析,将其导出到 Amazon S3 存储桶,对其进行更新,或者通过删除数据集将其删除。有关更多信息,请参阅 管理数据集中的训练数据

    导入数据后,就可以创建解决方案了。有关更多信息,请参阅 创建解决方案和解决方案版本

导入批量记录 (Amazon CLI)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。如果您已经导入了批量数据,则可以通过更改作业的导入模式来追加数据。

要使用导入批量记录 Amazon CLI,请使用CreateDatasetImportJob命令创建数据集导入任务。如果您之前已经为数据集创建了数据集导入作业,则可以使用导入模式参数来指定如何添加新数据。有关更新现有批量数据的更多信息,请参阅更新现有的批量数据

导入批量记录 (Amazon CLI)
  1. 通过运行以下命令来创建数据集导入作业。为您的数据集提供 Amazon 资源名称 (ARN),并指定存储训练数据的 Amazon S3 存储桶的路径。为该路径使用以下语法:

    s3://<name of your S3 bucket>/<folder path>/<CSV filename>

    如果您的 CSV 文件位于 Amazon S3 存储桶的某个文件夹中,并且您想通过一个数据集导入作业将多个 CSV 文件上传到一个数据集,则可以指定该文件夹的路径。Amazon Personalize 仅使用您文件夹第一级中的文件,不使用任何子文件夹中的任何数据。使用以下语法,在文件夹名称后面加上 /

    s3://<name of your S3 bucket>/<folder path>/

    提供您在中创建的 Amazon Identity and Access Management (IAM) 角色亚马逊资源名称 (ARN)。为 Amazon Personalize 创建 IAM 角色默认 import-modeFULL。有关更多信息,请参阅 更新现有的批量数据。有关操作的更多信息,请参阅CreateDatasetImportJob

    aws personalize create-dataset-import-job \ --job-name dataset import job name \ --dataset-arn dataset arn \ --data-source dataLocation=s3://bucketname/filename \ --role-arn roleArn \ --import-mode FULL

    数据集导入作业 ARN 将显示,如以下示例所示。

    { "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/DatasetImportJobName" }
  2. 通过使用 describe-dataset-import-job 命令来检查状态。提供上一个步骤中返回的数据集导入作业 ARN。有关操作的更多信息,请参阅DescribeDatasetImportJob

    aws personalize describe-dataset-import-job \ --dataset-import-job-arn dataset import job arn

    这将显示数据集导入作业的属性,包括其状态。最初,status 显示为 CREATE PENDING。

    { "datasetImportJob": { "jobName": "Dataset Import job name", "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/DatasetImportJobArn", "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/DatasetGroupName/INTERACTIONS", "dataSource": { "dataLocation": "s3://<bucketname>/ratings.csv" }, "importMode": "FULL", "roleArn": "role-arn", "status": "CREATE PENDING", "creationDateTime": 1542392161.837, "lastUpdatedDateTime": 1542393013.377 } }

    当状态显示为 ACTIVE 时,数据集导入完成。将数据导入 Amazon Personalize 数据集后,您可以对其进行分析,将其导出到 Amazon S3 存储桶,对其进行更新,或者通过删除数据集将其删除。有关更多信息,请参阅 管理数据集中的训练数据

    将您的数据导入到数据集组中的相关数据集后,您可以创建解决方案版本(经过训练的模型)。有关更多信息,请参阅 创建解决方案和解决方案版本

导入批量记录 (Amazon SDK)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。如果您已经导入了批量数据,则可以通过更改作业的导入模式来追加数据。

要导入数据,请通过 CreateDatasetImportJob 操作创建数据集导入作业。以下代码展示了如何创建数据集导入作业。

提供作业名称,将 datasetArn 设置为数据集的 Amazon 资源名称 (ARN),并将 dataLocation 设置为存储训练数据的 Amazon S3 存储桶的路径。为该路径使用以下语法:

s3://<name of your S3 bucket>/<folder path>/<CSV filename>.csv

如果您的 CSV 文件位于 Amazon S3 存储桶的某个文件夹中,并且您想通过一个数据集导入作业将多个 CSV 文件上传到一个数据集,则可以指定该文件夹的路径。Amazon Personalize 仅使用您文件夹第一级中的文件,不使用任何子文件夹中的任何数据。使用以下语法,在文件夹名称后面加上 /

s3://<name of your S3 bucket>/<folder path>/

对于roleArn,请指定授予 Amazon Personalize 访问您的 S3 存储桶权限的 Amazon Identity and Access Management (IAM) 角色。请参阅 为 Amazon Personalize 创建 IAM 角色。默认 importModeFULL。这将替换数据集中的所有批量数据。要追加数据,请INCREMENTAL将其设置为。有关更新现有批量数据的更多信息,请参阅更新现有的批量数据

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') response = personalize.create_dataset_import_job( jobName = 'YourImportJob', datasetArn = 'dataset_arn', dataSource = {'dataLocation':'s3://bucket/file.csv'}, roleArn = 'role_arn', importMode = 'FULL' ) dsij_arn = response['datasetImportJobArn'] print ('Dataset Import Job arn: ' + dsij_arn) description = personalize.describe_dataset_import_job( datasetImportJobArn = dsij_arn)['datasetImportJob'] print('Name: ' + description['jobName']) print('ARN: ' + description['datasetImportJobArn']) print('Status: ' + description['status'])
SDK for Java 2.x
public static String createPersonalizeDatasetImportJob(PersonalizeClient personalizeClient, String jobName, String datasetArn, String s3BucketPath, String roleArn, ImportMode importMode) { long waitInMilliseconds = 60 * 1000; String status; String datasetImportJobArn; try { DataSource importDataSource = DataSource.builder() .dataLocation(s3BucketPath) .build(); CreateDatasetImportJobRequest createDatasetImportJobRequest = CreateDatasetImportJobRequest.builder() .datasetArn(datasetArn) .dataSource(importDataSource) .jobName(jobName) .roleArn(roleArn) .importMode(importMode) .build(); datasetImportJobArn = personalizeClient.createDatasetImportJob(createDatasetImportJobRequest) .datasetImportJobArn(); DescribeDatasetImportJobRequest describeDatasetImportJobRequest = DescribeDatasetImportJobRequest.builder() .datasetImportJobArn(datasetImportJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { DatasetImportJob datasetImportJob = personalizeClient .describeDatasetImportJob(describeDatasetImportJobRequest) .datasetImportJob(); status = datasetImportJob.status(); System.out.println("Dataset import job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return datasetImportJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateDatasetImportJobCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // Set the dataset import job parameters. export const datasetImportJobParam = { datasetArn: 'DATASET_ARN', /* required */ dataSource: { dataLocation: 's3://<name of your S3 bucket>/<folderName>/<CSVfilename>.csv' /* required */ }, jobName: 'NAME', /* required */ roleArn: 'ROLE_ARN', /* required */ importMode: "FULL" /* optional, default is FULL */ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateDatasetImportJobCommand(datasetImportJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

来自 DescribeDatasetImportJob 操作的响应包含操作的状态。

您必须等待,直到状态更改为 ACTIVE,然后才能使用数据训练模型。

当状态显示为 ACTIVE 时,数据集导入完成。将数据导入 Amazon Personalize 数据集后,您可以对其进行分析,将其导出到 Amazon S3 存储桶,对其进行更新,或者通过删除数据集将其删除。有关更多信息,请参阅 管理数据集中的训练数据

将您的数据导入到数据集组中的相关数据集后,您可以创建解决方案版本(经过训练的模型)。有关更多信息,请参阅 创建解决方案和解决方案版本