

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

# 创建架构和数据集
<a name="data-prep-creating-datasets"></a>

[创建数据集组](data-prep-ds-group.md)后，就可以为要导入的每种数据类型创建 Amazon Personalize 架构和数据集了。*架构* 会将您的数据结构告知给 Amazon Personalize，并允许 Amazon Personalize 解析数据。在 Amazon Personalize 中创建架构时，使用在[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)中创建的 JSON 文件。

 *数据集*是 Amazon Personalize 中用于训练数据的容器。不同的数据集类型有不同的要求。您可以为要导入的每种数据类型创建一个数据集。有关不同类型数据集以及如何准备数据的信息，请参阅[为 Amazon Personalize 准备训练数据](preparing-training-data.md)。

您可以使用 Amazon Personalize 控制台创建架构和数据集， Amazon Command Line Interface (Amazon CLI) 或 Amazon SDKs。您无法在域数据集组中创建下一个最佳操作资源，包括操作和操作交互数据集。

**重要**  
 创建架构后，您无法更改架构。但如果要添加新列，则可以将数据集的架构替换为新架构。有关更多信息，请参阅 [替换数据集的架构，以便添加新列](updating-dataset-schema.md)。

**Topics**
+ [创建数据集和架构（控制台）](#data-prep-creating-ds-console)
+ [创建数据集和架构 (Amazon CLI)](#data-prep-creating-ds-cli)
+ [创建数据集和架构 (Amazon SDKs)](#data-prep-creating-ds-sdk)

## 创建数据集和架构（控制台）
<a name="data-prep-creating-ds-console"></a>

 如果这是您的数据集组中的第一个数据集，则您的第一个数据集类型将是物品交互数据集。要在控制台中创建物品交互数据集，请指定数据集名称，然后以 [Avro 格式](https://docs.oracle.com/database/nosql-12.1.3.0/GettingStartedGuide/avroschemas.html)指定 JSON 架构。如果这不是您在此数据集组中的第一个数据集，请选择数据集类型，然后指定名称和架构。

有关 Amazon Personalize 数据集要求的信息，请参阅[为 Amazon Personalize 准备训练数据](preparing-training-data.md)。如果您刚完成[创建 Amazon Personalize 数据集组](data-prep-ds-group.md)并且已经在创建数据集，请跳至此过程中的步骤 4。

**创建数据集和架构**

1. 如果还没有用于概述数据的架构 JSON 文件，请按照[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)中的说明创建 JSON 文件。

1. 在[https://console.aws.amazon.com/personalize/家](https://console.amazonaws.cn/personalize/home)中打开 Amazon Personalize 控制台并登录您的账户。

1.  在**数据集组**页面上，选择您在[创建 Amazon Personalize 数据集组](data-prep-ds-group.md)中创建的数据集组。

1. 在**步骤 1. 创建数据集和导入数据**中，选择**创建数据集**，然后选择要创建的数据集类型。

1. 选择**将数据直接导入 Amazon Personalize 数据集**，然后选择**下一步**。

1. 在**数据集详细信息**中，对于**数据集名称**，为您的数据集指定名称。

1. 对于**数据集架构**，选择**创建新架构**或**使用现有架构**。

1. 如果您使用的是现有架构，请选择要使用的现有架构。如果要创建新架构，请为架构取名并粘贴到与您的数据匹配的架构 JSON 中。您在[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)中创建了此文件。

1. 对于**标签**，可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息，请参阅[为 Amazon Personalize 资源添加标签](tagging-resources.md)。

1. 选择**下一步**，然后按照[将训练数据导入 Amazon Personalize 数据集](import-data.md)中的说明导入数据。

## 创建数据集和架构 (Amazon CLI)
<a name="data-prep-creating-ds-cli"></a>

要使用创建数据集和架构 Amazon CLI，请使用`create-schema`命令（使用 [CreateSchema](API_CreateSchema.md) API 操作），然后使用命令`create-dataset`（使用 [CreateDataset](API_CreateDataset.md) API 操作）。

**创建架构和数据集**

1. 如果还没有用于概述数据的架构 JSON 文件，请按照[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)中的说明创建 JSON 文件。

1. 通过运行以下命令在 Amazon Personalize 中创建架构。创建架构后，您无法更改架构。将 `schemaName` 替换为架构的名称，将 `file://SchemaName.json` 替换为您的 JSON 文件的位置。此示例将该文件显示为属于当前文件夹。如果要为域数据集组中的数据集创建架构，则添加 `domain` 参数并将其设置为 `ECOMMERCE` 或 `VIDEO_ON_DEMAND`。有关 API 的更多信息，请参阅 [CreateSchema](API_CreateSchema.md)。

   ```
   aws personalize create-schema \
     --name SchemaName \
     --schema file://SchemaName.json
   ```

   这将显示架构 Amazon 资源名称 (ARN)，如以下示例所示：

   ```
   {
     "schemaArn": "arn:aws:personalize:us-west-2:acct-id:schema/SchemaName"
   }
   ```

1. 通过运行以下命令来创建一个空数据集。提供来自[创建数据集组 (Amazon CLI)](data-prep-ds-group.md#data-prep-creating-ds-group-cli) 的数据集组 Amazon 资源名称 (ARN) 和来自上一步的架构 ARN。数据集类型值可以是 `Interactions`、`Users`、`Items`、`Actions` 或 `Action_Interactions`。有关 API 的更多信息，请参阅 [CreateDataset](API_CreateDataset.md)。

   ```
   aws personalize create-dataset \
     --name Dataset Name \
     --dataset-group-arn Dataset Group ARN \
     --dataset-type Dataset Type \
     --schema-arn Schema Arn
   ```

   这时将显示数据集 ARN，如以下示例所示。

   ```
   {
     "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/DatasetName/INTERACTIONS"
   }
   ```

1. 记录数据集 ARN 以备后用。创建数据集后，就可以导入训练数据了。请参阅[将训练数据导入 Amazon Personalize 数据集](import-data.md)。

## 创建数据集和架构 (Amazon SDKs)
<a name="data-prep-creating-ds-sdk"></a>

要使用创建数据集和架构 Amazon SDKs，您需要先定义 [Avro 格式的架构，然后使用[CreateSchema](API_CreateSchema.md)操作将其添加到 A](https://docs.oracle.com/database/nosql-12.1.3.0/GettingStartedGuide/avroschemas.html) mazon Personalize 中。创建架构后，您无法更改架构。随后，使用 [CreateDataset](API_CreateDataset.md) 操作创建数据集。

**创建架构和数据集**

1. 如果还没有用于概述数据的架构 JSON 文件，请按照[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)中的说明创建 JSON 文件。

1. 使用以下代码在 Amazon Personalize 中创建架构。为架构指定名称，为架构 JSON 文件指定文件路径。如果要为域数据集组中的数据集创建架构，则添加 `domain` 参数并将其设置为 `ECOMMERCE` 或 `VIDEO_ON_DEMAND`。有关 API 的更多信息，请参阅 [CreateSchema](API_CreateSchema.md)。

------
#### [ SDK for Python (Boto3) ]

   ```
   import boto3
   
   personalize = boto3.client('personalize')
   
   with open('schemaFile.json') as f:
       createSchemaResponse = personalize.create_schema(
           name = 'schema name',
           schema = f.read()
       )
   
   schema_arn = createSchemaResponse['schemaArn']
   
   print('Schema ARN:' + schema_arn )
   ```

------
#### [ SDK for Java 2.x ]

   ```
   public static String createSchema(PersonalizeClient personalizeClient, String schemaName, String filePath) {
       
       String schema = null;
       
       try {
           schema = new String(Files.readAllBytes(Paths.get(filePath)));
       } catch (IOException e) {
           System.out.println(e.getMessage());
       }
       
       try {
           CreateSchemaRequest createSchemaRequest = CreateSchemaRequest.builder()
                   .name(schemaName)
                   .schema(schema)
                   .build();
   
           String schemaArn = personalizeClient.createSchema(createSchemaRequest).schemaArn();    
           System.out.println("Schema arn: " + schemaArn);
   
           return schemaArn;
   
       } catch(PersonalizeException e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
       return "";
   }
   ```

------
#### [ SDK for JavaScript v3 ]

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateSchemaCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   import fs from "node:fs";
   
   const schemaFilePath = "SCHEMA_PATH";
   let mySchema = "";
   
   try {
     mySchema = fs.readFileSync(schemaFilePath).toString();
   } catch (err) {
     mySchema = "TEST"; // For unit tests.
   }
   // Set the schema parameters.
   export const createSchemaParam = {
     name: "NAME" /* required */,
     schema: mySchema /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateSchemaCommand(createSchemaParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

------

   Amazon Personalize 将返回新架构的 ARN。记录该 ARN，因为需要在下一步中使用。

1. 使用 [CreateDataset](API_CreateDataset.md) 操作创建数据集。以下代码展示了如何创建数据集。指定数据集组的 Amazon 资源名称 (ARN)、上一步中的架构 ARN，并指定数据集类型。数据集类型值可以是 `Interactions`、`Users`、`Items`、`Actions` 或 `Action_Interactions`。有关不同类型数据集的信息，请参阅[为 Amazon Personalize 准备训练数据](preparing-training-data.md)。

------
#### [ SDK for Python (Boto3) ]

   ```
   import boto3
   
   personalize = boto3.client('personalize')
   
   response = personalize.create_dataset(
       name = 'dataset_name',
       schemaArn = 'schema_arn',
       datasetGroupArn = 'dataset_group_arn',
       datasetType = 'dataset_type'
   )
   
   print ('Dataset Arn: ' + response['datasetArn'])
   ```

------
#### [ SDK for Java 2.x ]

   ```
   public static String createDataset(PersonalizeClient personalizeClient, 
                                       String datasetName, 
                                       String datasetGroupArn, 
                                       String datasetType, 
                                       String schemaArn) {
       try {
           CreateDatasetRequest request = CreateDatasetRequest.builder()
                   .name(datasetName)
                   .datasetGroupArn(datasetGroupArn)
                   .datasetType(datasetType)
                   .schemaArn(schemaArn).build();
       
           String datasetArn = personalizeClient.createDataset(request).datasetArn();
           System.out.println("Dataset " + datasetName + " created. Dataset ARN: " + datasetArn);
           
           return datasetArn;
           
       } catch(PersonalizeException e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
       return "";
   }
   ```

------
#### [ SDK for JavaScript v3 ]

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset's parameters.
   export const createDatasetParam = {
     datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
     datasetType: "DATASET_TYPE" /* required */,
     name: "NAME" /* required */,
     schemaArn: "SCHEMA_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetCommand(createDatasetParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

------

   创建数据集后，就可以导入训练数据了。请参阅[将训练数据导入 Amazon Personalize 数据集](import-data.md)。