单独导入物品 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

单独导入物品

完成创建数据集和架构以创建物品数据集后,您可以单独将一个或多个新物品导入数据集。单独导入物品允许您随着目录的增长而进行小批量导入,从而使您的物品数据集保持最新状态。您一次最多可以导入 10 个物品。如果您有大量新物品,我们建议您先批量导入数据,然后根据需要单独导入物品数据。请参阅 将数据直接导入 Amazon Personalize 数据集

您可以使用 Amazon Personalize 控制台、 Amazon Command Line Interface (Amazon CLI) 或 Amazon 软件开发工具包导入商品。如果您导入的物品的 itemId 与您物品数据集中已有的物品 ID 相同,则 Amazon Personalize 会将其替换为新物品。

有关 Amazon Personalize 如何更新新记录筛选器以及新记录如何影响建议的信息,请参阅导入单个记录

单独导入物品(控制台)

您一次最多可以向物品数据集导入 10 个物品。此过程假定您已经创建了一个物品数据集。有关创建数据集的信息,请参阅创建数据集和架构

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

  2. 数据集组页面上,选择包含要将物品导入到的物品数据集的数据集组。

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

  4. 数据集页面上,选择物品数据集。

  5. 在数据集详细信息页面的右上角,选择修改数据集,然后选择创建记录

  6. 创建物品记录页面中,对于记录输入,以 JSON 格式输入物品详细信息。物品的字段名称和值必须与您在创建物品数据集时使用的架构匹配。Amazon Personalize 提供一个 JSON 模板,其中包含该架构中的字段名称和数据类型。

  7. 选择创建记录。在响应中,将列出导入结果并显示成功或失败消息。

单独导入物品 (Amazon CLI)

使用 PutItems 操作将一个或多个物品添加到您的物品数据集。通过单次 PutItems 调用最多可以导入 10 个物品。此部分假定您已经创建了一个物品数据集。有关创建数据集的信息,请参阅创建数据集和架构

通过 Amazon CLI 使用以下 put-items 命令添加一个或多个物品。将 dataset arn 替换为数据集的 Amazon 资源名称 (ARN),将 item Id 替换为物品 ID。如果具有相同 itemId 的物品已存在于物品数据集中,则 Amazon Personalize 会将其替换为新物品。

对于 properties,针对物品数据集中的每个字段,将 propertyName 替换为架构中的字段名称(采用混合大小写)。例如,GENRES 将是 genres,CREATION_TIMESTAMP 将是 creationTimestamp。将 item data 替换为物品的数据。CREATION_TIMESTAMP 数据必须采用 Unix 纪元时间格式(以秒为单位)。对于分类字符串数据,要包含单个属性的多个类别,请使用竖线 (|) 分隔每个类别。例如 \"Horror|Action\"

aws personalize-events put-items \ --dataset-arn dataset arn \ --items '[{ "itemId": "item Id", "properties": "{\"propertyName\": "\item data\"}" }, { "itemId": "item Id", "properties": "{\"propertyName\": "\item data\"}" }]'

单独导入项目 (Amazon SDK)

使用 PutItems 操作将一个或多个物品添加到您的物品数据集。通过单次 PutItems 调用最多可以导入 10 个物品。如果具有相同 itemId 的物品已存在于物品数据集中,则 Amazon Personalize 会将其替换为新物品。此部分假定您已经创建了一个物品数据集。有关创建数据集的信息,请参阅创建数据集和架构

以下代码显示如何将一个或多个物品添加到物品数据集。对于每个属性名称参数,传递架构中的字段名称(采用混合大小写)。例如,GENRES 将是 genres,CREATION_TIMESTAMP 将是 creationTimestamp。对于每个属性值参数,传递物品的数据。CREATION_TIMESTAMP 数据必须采用 Unix 纪元时间格式(以秒为单位)。

对于分类字符串数据,要包含单个属性的多个类别,请使用竖线 (|) 分隔每个类别。例如 "Horror|Action"

SDK for Python (Boto3)
import boto3 personalize_events = boto3.client(service_name='personalize-events') personalize_events.put_items( datasetArn = 'dataset arn', items = [{ 'itemId': 'item ID', 'properties': "{\"propertyName\": \"item data\"}" }, { 'itemId': 'item ID', 'properties': "{\"propertyName\": \"item data\"}" }] )
SDK for Java 2.x
public static int putItems(PersonalizeEventsClient personalizeEventsClient, String datasetArn, String item1Id, String item1PropertyName, String item1PropertyValue, String item2Id, String item2PropertyName, String item2PropertyValue) { int responseCode = 0; ArrayList<Item> items = new ArrayList<>(); try { Item item1 = Item.builder() .itemId(item1Id) .properties(String.format("{\"%1$s\": \"%2$s\"}", item1PropertyName, item1PropertyValue)) .build(); items.add(item1); Item item2 = Item.builder() .itemId(item2Id) .properties(String.format("{\"%1$s\": \"%2$s\"}", item2PropertyName, item2PropertyValue)) .build(); items.add(item2); PutItemsRequest putItemsRequest = PutItemsRequest.builder() .datasetArn(datasetArn) .items(items) .build(); responseCode = personalizeEventsClient.putItems(putItemsRequest).sdkHttpResponse().statusCode(); System.out.println("Response code: " + responseCode); return responseCode; } catch (PersonalizeEventsException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return responseCode; }
SDK for JavaScript v3
import { PutItemsCommand, PersonalizeEventsClient, } from "@aws-sdk/client-personalize-events"; const personalizeEventsClient = new PersonalizeEventsClient({ region: "REGION", }); // set the put items parameters var putItemsParam = { datasetArn: "DATASET ARN", items: [ { itemId: "itemId", properties: '{"column1Name": "value", "column2Name": "value"}', }, { itemId: "itemId", properties: '{"column1Name": "value", "column2Name": "value"}', }, ], }; export const run = async () => { try { const response = await personalizeEventsClient.send( new PutItemsCommand(putItemsParam) ); console.log("Success!", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();