导出数据集 - Amazon Personalize
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

导出数据集

完成后准备和导入数据,您可以将交互、项目或用户数据集中的数据导出到 Amazon S3 存储桶。导出数据集后,您可以验证和检查 Amazon Personalize 用于生成建议的数据、查看之前实时记录的用户交互事件以及对数据执行离线分析。

您可以选择仅导出批量导入的数据(使用 Amazon Personalize 数据集导入任务导入),只导出您以增量方式导入的数据(使用控制台或PutEventsPutUsers,或者PutItems操作),或两者兼有。

要导出数据集,需要创建数据集导出作业。A数据集导出任务是一种记录导出工具,可将数据集中的记录输出到 Amazon S3 存储桶中的一个或多个 CSV 文件。输出 CSV 文件包含一个标题行,其列名称与数据集方案中的字段相匹配。Amazon Personalize 将重复记录(与所有字段完全匹配的记录)合并为一个记录。

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

数据集导出作业权限要求

要导出数据集,Amazon Personalize 需要向您的 Amazon S3 存储桶添加文件的权限。要授予权限,请附加一个新的Amazon Identity and Access Management(IAM) 策略添加到 Amazon Personalize 服务相关角色PutObject权限,并将存储桶策略添加到输出 Amazon S3 存储桶,该存储桶授予PutObject权限。

Amazon S3 存储桶和数据元必须是免加密的,或者如果您使用的是Amazon Key Management Service(AmazonKMS)进行加密,您必须向您的 IAM 用户和 Amazon Personalize 服务链接角色授予使用您的密钥的权限。您还必须将 Amazon Personalize 作为原则添加到您的Amazon KMS密钥策略。有关更多信息,请参阅 。使用 中的密钥策略AmazonKMS中的Amazon Key Management Service开发人员指南

用于导出数据集的服务相关角色策略

以下是授予您的 Amazon Personalize 服务关联角色的示例策略PutObject权限。Replacebucket-name替换为您的输出存储桶的名称。有关向服务相关 IAM 角色添加策略的信息,请参阅将 Amazon S3 策略附加到 Amazon Personalize 服务角色

{ "Version": "2012-10-17", "Id": "PersonalizeS3BucketAccessPolicy", "Statement": [ { "Sid": "PersonalizeS3BucketAccessPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }

用于导出数据集的 Amazon S3 存储桶策略

以下示例策略授予 Amazon Personalize 权限以使用PutObject对 Amazon S3 存储桶执行的操作。将 bucket-name 替换为您的存储桶的名称。有关向存储桶添加 Amazon S3 存储桶策略的信息,请参阅如何添加 S3 存储桶策略?中的Amazon Simple Storage Service 控制台用户指南。

{ "Version": "2012-10-17", "Id": "PersonalizeS3BucketAccessPolicy", "Statement": [ { "Sid": "PersonalizeS3BucketAccessPolicy", "Effect": "Allow", "Principal": { "Service": "personalize.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }

创建数据集导出任务(控制台)

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

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

创建数据集导出任务(控制台)

  1. 从打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home

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

  3. 在存储库的数据集组页面上,选择您的数据集组。

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

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

  6. In数据集导出任务中,选择创建数据集导出任务

  7. In数据集导出任务细节, 用于数据集导出任务名称中,输入导出任务的名称。

  8. 适用于IAM 服务角色中,选择您在为 Amazon Personalize 创建 IAM 角色

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

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

  10. 如果您正在使用Amazon KMS用于加密,用于KMS 密钥 ARN中,输入 Amazon 资源名称 (ARN)Amazon KMS密钥。

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

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

    • 选择递增以仅导出使用控制台或进行增量导入的数据PutEventsPutUsers,或者PutItems运算符。

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

  12. 选择创建数据集导出任务

    在存储库的数据集概述页面, 位于数据集导出任务,则该作业将列出一个导出任务状态。当状态为时,数据集导出作业创建完成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替换为要导出数据集的 Amazon 资源名称 (ARN),然后将role ARN的 Amazon Personalize 服务相关角色的 ARN为 Amazon Personalize 创建 IAM 角色。Ins3DataDestination,用于kmsKeyArn,可以选择为您的Amazon KMS键,并用于path提供您的输出 Amazon S3 存储桶的路径。

适用于ingestion-mode中,从以下选项指定要导出的数据:

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

  • 指定PUT以仅导出使用控制台或进行增量导入的数据PutEvents、弹出用户或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://bucket-name/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开发工具包)

将数据导入数据集并创建输出 Amazon S3 存储桶后,您可以将数据集导出到存储桶以进行分析。要使用Amazon软件开发工具包中,使用CreateDatasetExportJoboperation. 有关创建 Amazon S3 存储桶的信息,请参阅创建存储桶中的Amazon Simple Storage Service 控制台用户指南

下面的代码显示了如何使用适用于 Python 的开发工具包 (Bot3) 或适用于 Java 2.x 的软件开发工具包创建数据集导出作业。

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

SDK for Python (Boto3)

请使用以下create_dataset_export_job以将数据集中的数据导出到 Amazon S3 存储桶。为作业指定一个名称,替换dataset arn替换为要导出数据集的 Amazon 资源名称 (ARN),然后将role ARN的 Amazon Personalize 服务相关角色的 ARN为 Amazon Personalize 创建 IAM 角色。Ins3DataDestination,用于kmsKeyArn,可以选择为您的Amazon KMS键,并用于path提供您的输出 Amazon S3 存储桶的路径。

适用于ingestionMode中,从以下选项指定要导出的数据:

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

  • 指定PUT以仅导出使用控制台或进行增量导入的数据PutEvents、弹出用户或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://bucket-name/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方法创建数据集导出任务。传递以下作为参数:个性化设置、导出任务的名称、要导出的数据集的 ARN、引入模式、输出 Amazon S3 存储桶的路径以及Amazon KMS密钥。

这些区域有:ingestionMode可以是以下选项之一:

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

  • 使用IngestionMode.PUT以仅导出使用控制台或进行增量导入的数据PutEvents、弹出用户或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()); } }