通过数据集导入作业将批量数据导入到 Amazon Personalize - Amazon Personalize

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

通过数据集导入作业将批量数据导入到 Amazon Personalize

格式化输入数据(请参阅为 Amazon Personalize 准备训练数据)并完成创建架构和数据集后,就可以通过数据集导入作业导入批量数据。数据集导入作业是一种批量导入工具,可通过 Amazon S3 中的数据填充数据集。

要从 Amazon S3 导入数据,您的CSV文件必须存储在 Amazon S3 存储桶中,并且您必须向 Amazon Personalize 授予访问您的 Amazon S3 资源的权限:

您可以使用 Amazon Personalize 控制台 AWS Command Line Interface (AWS CLI)或创建数据集导入任务 AWS SDKs。如果您之前为数据集创建了数据集导入作业,则可以使用新的数据集导入作业来添加或替换现有批量数据。有关更多信息,请参阅 训练后更新数据集中的数据

如果您导入的项目、用户或操作的编号与数据集中已有的记录相同,Amazon Personalize 会将其替换为新记录。如果您记录了两个具有完全相同时间戳和相同属性的商品互动或操作互动事件,Amazon Personalize 将只保留其中一个事件。

导入数据后,就可以创建域推荐器(适用于域数据集组)或自定义资源(适用于自定义数据集组),以根据您的数据训练模型。使用这些资源生成建议。有关更多信息,请参阅 Amazon Personalize 中的域推荐器用于训练和部署 Amazon Personalize 模型的自定义资源

导入模式

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

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

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

    注意

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

创建数据集导入作业(控制台)

重要

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

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

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

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

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

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

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

  5. 如果这是第一个数据集导入作业,则对于数据导入源,请选择从 S3 导入数据

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

  7. 如果您已导入批量数据,则对于导入模式,请选择如何更新数据集。选择替换现有数据添加到现有数据。如果这是第一个数据集作业,则不会显示此选项。有关更多信息,请参阅 训练后更新数据集中的数据

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

    s3:/amzn-s3-demo-bucket/<folder path>/<CSV filename>

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

    s3:/amzn-s3-demo-bucket/<folder path>/

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

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

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

    有关指标归因的更多信息,请参阅衡量 Amazon Personalize 推荐的影响

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

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

    导入数据后,就可以创建域推荐器(适用于域数据集组)或自定义资源(适用于自定义数据集组),以根据您的数据训练模型。使用这些资源生成建议。有关更多信息,请参阅 Amazon Personalize 中的域推荐器用于训练和部署 Amazon Personalize 模型的自定义资源

创建数据集导入作业(AWS CLI)

重要

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

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

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

    s3:/amzn-s3-demo-bucket/<folder path>/<CSV filename>

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

    s3:/amzn-s3-demo-bucket/<folder path>/

    提供您在中创建的 AWS Identity and Access Management (IAM) 角色 Amazon 资源名称 (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://amzn-s3-demo-bucket/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节目是CREATEPENDING。

    { "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://amzn-s3-demo-bucket/ratings.csv" }, "importMode": "FULL", "roleArn": "role-arn", "status": "CREATE PENDING", "creationDateTime": 1542392161.837, "lastUpdatedDateTime": 1542393013.377 } }

    当状态显示为时,数据集导入即告完成ACTIVE。将数据导入 Amazon Personalize 数据集后,您可以对其进行分析将其导出到 Amazon S3 存储桶对其进行更新,或者通过删除数据集将其删除

    导入数据后,就可以创建域推荐器(适用于域数据集组)或自定义资源(适用于自定义数据集组),以根据您的数据训练模型。使用这些资源生成建议。有关更多信息,请参阅 Amazon Personalize 中的域推荐器用于训练和部署 Amazon Personalize 模型的自定义资源

创建数据集导入作业(AWS SDKs)

重要

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

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

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

s3:/amzn-s3-demo-bucket/<folder path>/<CSV filename>.csv

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

s3:/amzn-s3-demo-bucket/<folder path>/

对于roleArn,请指定授予 Amazon Personalize 访问您的 S3 存储桶权限的 AWS 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://amzn-s3-demo-bucket/filename.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://amzn-s3-demo-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 存储桶对其进行更新,或者通过删除数据集将其删除

导入数据后,就可以创建域推荐器(适用于域数据集组)或自定义资源(适用于自定义数据集组),以根据您的数据训练模型。使用这些资源生成建议。有关更多信息,请参阅 Amazon Personalize 中的域推荐器用于训练和部署 Amazon Personalize 模型的自定义资源