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

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

在 Amazon Personalize 中创建数据集导出作业

您可以使用 Amazon Personalize 控制台创建数据集导出任务, Amazon Command Line Interface (Amazon CLI) 或 Amazon SDKs。

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

将数据导入数据集并创建输出 Amazon S3 存储桶后,您可以将数据导出到存储桶进行分析。要使用 Amazon Personalize 控制台导出数据集,您需要创建数据集导出作业。有关创建 Amazon S3 存储桶的信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建存储桶

在导出数据集之前,确保您的 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅 数据集导出作业权限要求

创建数据集导出作业(控制台)
  1. https://console.aws.amazon.com/personalize/家中打开 Amazon Personalize 控制台。

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

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

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

  5. 选择要导出到 Amazon S3 存储桶的数据集。

  6. 数据集导出作业中,选择创建数据集导出作业

  7. 数据集导出作业详细信息中,对于数据集导出作业名称,输入导出作业的名称。

  8. 对于IAM服务角色,请选择您在中创建的 Amazon Personalize 服务角色为 Amazon Personalize 创建IAM角色

  9. 对于 Amazon S3 数据输出路径,输入目标 Amazon S3 存储桶。使用以下语法:

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

  10. 如果您使用 Amazon KMS 加密KMS密钥ARN,请输入密钥的 Amazon 资源名称 (ARN)。 Amazon KMS

  11. 对于导出数据类型,根据您最初导入数据的方式,选择要导出的数据类型。

    • 选择批量,仅导出使用数据集导入作业批量导入的数据。

    • 选择增量,仅导出您使用控制台或者 PutEventsPutUsersPutItems 操作单独导入的数据。

    • 选择两者,导出数据集中的所有数据。

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

  13. 选择创建数据集导出作业

    数据集概述页面的数据集导出作业中,作业以导出作业状态列出。当状态为时,数据集导出任务已完成ACTIVE。然后,您可以从输出 Amazon S3 存储桶中下载数据。有关从 Amazon S3 存储桶下载对象的信息,请参阅《Amazon Simple Storage Service 用户指南》中的下载对象

创建数据集导出作业 (Amazon CLI)

将数据导入数据集并创建输出 Amazon S3 存储桶后,您可以将数据集导出到存储桶进行分析。要使用导出数据集 Amazon CLI,请使用create-dataset-export-job Amazon CLI 命令创建数据集导出任务。有关创建 Amazon S3 存储桶的信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建存储桶

在导出数据集之前,确保 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅 数据集导出作业权限要求

以下是 create-dataset-export-job Amazon CLI 命令的示例。为任务命名,dataset arn替换为要导出的数据集的亚马逊资源名称 (ARN),然后替换role ARN为您在中创建的 Amazon Personalize 服务角色的名称为 Amazon Personalize 创建IAM角色。ARN在中s3DataDestination,对于可以选择为您的 Amazon KMS 密钥提供,ARN为path提供输出 Amazon S3 存储桶的路径。kmsKeyArn

对于 ingestion-mode,通过以下选项指定要导出的数据:

  • 指定 BULK,仅导出使用数据集导入作业批量导入的数据。

  • 指定仅导PUT出您使用控制台或PutEvents PutUsers、或PutItems操作单独导入的数据。

  • 指定 ALL,导出数据集中的所有数据。

有关更多信息,请参阅 CreateDatasetExportJob

aws personalize create-dataset-export-job \ --job-name job name \ --dataset-arn dataset ARN \ --job-output "{\"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://amzn-s3-demo-bucket/folder-name/\"}}" \ --role-arn role ARN \ --ingestion-mode PUT

将显示数据集导ARN出作业。

{ "datasetExportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-export-job/DatasetExportJobName" }

使用 DescribeDatasetExportJob 操作检查状态。

aws personalize describe-dataset-export-job \ --dataset-export-job-arn dataset export job ARN

创建数据集导出作业 (Amazon SDKs)

将数据导入数据集并创建输出 Amazon S3 存储桶后,您可以将数据集导出到存储桶进行分析。要使用导出数据集 Amazon SDKs,请使用CreateDatasetExportJob操作创建数据集导出任务。有关创建 Amazon S3 存储桶的信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建存储桶

以下代码显示了如何使用SDK适用于 Python (Boto3) 或适用于 Java 2.x 的 2.x 创建数据集导出任务。SDK SDK

在导出数据集之前,确保 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅 数据集导出作业权限要求

SDK for Python (Boto3)

使用以下 create_dataset_export_job,将数据集中的数据导出到 Amazon S3 存储桶。为任务命名,dataset arn替换为要导出的数据集的亚马逊资源名称 (ARN),然后替换role ARN为您在中创建的 Amazon Personalize 服务角色的名称为 Amazon Personalize 创建IAM角色。ARN在中s3DataDestination,对于可以选择为您的 Amazon KMS 密钥提供,ARN为path提供输出 Amazon S3 存储桶的路径。kmsKeyArn

对于 ingestionMode,通过以下选项指定要导出的数据:

  • 指定 BULK,仅导出使用数据集导入作业批量导入的数据。

  • 指定仅导PUT出您使用控制台或PutEvents PutUsers、或PutItems操作单独导入的数据。

  • 指定 ALL,导出数据集中的所有数据。

import boto3 personalize = boto3.client('personalize') response = personalize.create_dataset_export_job( jobName = 'job name', datasetArn = 'dataset ARN', jobOutput = { "s3DataDestination": { "kmsKeyArn": "kms key ARN", "path": "s3://amzn-s3-demo-bucket/folder-name/" } }, roleArn = 'role ARN', ingestionMode = 'PUT' ) dsej_arn = response['datasetExportJobArn'] print ('Dataset Export Job arn: ' + dsej_arn) description = personalize.describe_dataset_export_job( datasetExportJobArn = dsej_arn)['datasetExportJob'] print('Name: ' + description['jobName']) print('ARN: ' + description['datasetExportJobArn']) print('Status: ' + description['status'])
SDK for Java 2.x

使用以下 createDatasetExportJob 方法创建数据集导出作业。将以下内容作为参数传递:a PersonalizeClient、导出任务的名称、要导出的数据集ARN的名称、摄取模式、输出 Amazon S3 存储桶的路径以及密钥ARN Amazon KMS 的路径。

ingestionMode 可以是以下一个选项:

  • 使用 IngestionMode.BULK,仅导出使用数据集导入作业批量导入的数据。

  • 用于IngestionMode.PUT仅导出您使用控制台或PutEvents PutUsers、或PutItems操作单独导入的数据。

  • 使用 IngestionMode.ALL,导出数据集中的所有数据。

public static void createDatasetExportJob(PersonalizeClient personalizeClient, String jobName, String datasetArn, IngestionMode ingestionMode, String roleArn, String s3BucketPath, String kmsKeyArn) { long waitInMilliseconds = 30 * 1000; // 30 seconds String status = null; try { S3DataConfig exportS3DataConfig = S3DataConfig.builder() .path(s3BucketPath) .kmsKeyArn(kmsKeyArn) .build(); DatasetExportJobOutput jobOutput = DatasetExportJobOutput.builder() .s3DataDestination(exportS3DataConfig) .build(); CreateDatasetExportJobRequest createRequest = CreateDatasetExportJobRequest.builder() .jobName(jobName) .datasetArn(datasetArn) .ingestionMode(ingestionMode) .jobOutput(jobOutput) .roleArn(roleArn) .build(); String datasetExportJobArn = personalizeClient.createDatasetExportJob(createRequest).datasetExportJobArn(); DescribeDatasetExportJobRequest describeDatasetExportJobRequest = DescribeDatasetExportJobRequest.builder() .datasetExportJobArn(datasetExportJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { DatasetExportJob datasetExportJob = personalizeClient.describeDatasetExportJob(describeDatasetExportJobRequest) .datasetExportJob(); status = datasetExportJob.status(); System.out.println("Export job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } }