更新现有的批量数据 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

更新现有的批量数据

如果您之前为数据集创建了数据集导入作业,则可以使用另一个导入作业来添加或替换现有的批量数据。默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。相反,您可以通过更改作业的导入模式,将新记录附加到现有数据中。

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

如果您已经创建了推荐器或通过市场活动部署了自定义解决方案版本,则新批量记录如何影响建议取决于您使用的域使用案例或配方。有关更多信息,请参阅新数据如何影响实时建议

筛选批量记录的更新

在完成批量导入后 20 分钟内,Amazon Personalize 会使用您的新批量数据,更新您在数据集组中创建的所有筛选条件。此更新允许 Amazon Personalize 在筛选针对用户的建议时使用最新数据。

导入模式

要配置 Amazon Personalize 如何将您的新记录添加到数据集中,您需要为数据集导入作业指定导入模式:

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

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

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

如果您尚未导入批量记录,则添加到现有数据选项在控制台中不可用,您只能在 CreateDatasetImportJob API 操作中指定 FULL。默认为完整替换。

更新批量记录(控制台)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。您可以通过指定作业的导入模式来更改此设置。

要通过 Amazon Personalize 控制台更新批量数据,请为数据集创建数据集导入作业并指定导入模式。

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

  2. 数据集组页面,选择您的数据集组。

  3. 从导航窗格中选择数据集

  4. 数据集页面上,选择要更新的数据集。

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

  6. 导入作业详细信息下,对于数据集导入作业名称,为导入作业指定一个名称。

  7. 对于导入模式,选择如何更新数据集。选择替换现有数据添加到现有数据。有关更多信息,请参阅导入模式

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

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

    如果您的 CSV 文件位于 S3 存储桶的文件夹中,并且您想要通过一个数据集导入作业将多个 CSV 文件上传到数据集,请使用不带 CSV 文件名的语法。

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

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

  11. 选择完成。数据导入作业开始,并显示数据集概览页。当状态为 ACTIVE 时,表示数据集导入完成。

更新批量记录 (Amazon CLI)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。您可以通过指定作业的导入模式来更改此设置。

要更新批量数据,请使用 create-dataset-import-job 命令。对于 import-mode,指定 FULL 以替换现有数据,或者指定 INCREMENTAL 以向其中添加数据。有关更多信息,请参阅导入模式

以下代码演示如何创建以增量方式将数据导入数据集的数据集导入作业。

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 INCREMENTAL

更新批量记录 (Amazon SDK)

重要

默认情况下,数据集导入作业会替换您批量导入的数据集中的任何现有数据。您可以通过指定作业的导入模式来更改此设置。

要更新批量数据,请创建数据集导入作业并指定导入模式。以下代码展示了如何使用 SDK for Python (Boto3) 或 SDK for Java 2.x 在 Amazon Personalize 中更新批量数据。

SDK for Python (Boto3)

要更新批量数据,请使用 create_dataset_import_job 方法。对于 import-mode,指定 FULL 以替换现有数据,或者指定 INCREMENTAL 以向其中添加数据。有关更多信息,请参阅导入模式

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 = 'INCREMENTAL' )
SDK for Java 2.x

要更新批量数据,请使用以下 createPersonalizeDatasetImportJob 方法。对于 importImport,指定 ImportMode.FULL 以替换现有数据,或者指定 ImportMode.INCREMENTAL 以向其中添加数据。有关更多信息,请参阅导入模式

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: "INCREMENTAL" /* 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();