將資料集中的訓練資料匯出到 Amazon S3 - Amazon Personalize

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將資料集中的訓練資料匯出到 Amazon S3

將資料匯入 Amazon 個人化資料集之後,您可以將資料匯出到 Amazon S3 儲存貯體。您可以匯出資料以驗證和檢查 Amazon Personalize 用來產生建議、即時檢視先前記錄的項目互動事件,或對資料執行離線分析的資料。

您可以選擇只匯出大量匯入的資料 (使用 Amazon Personalize 資料集匯入任務匯入)、僅匯入個別匯入的資料 (使用主控台或、或作PutItems業匯入的記錄) PutEventsPutUsers,或兩者皆匯入。

注意

您無法匯出「動作」互動資料集或「動作」資料集中的資料。

對於與所有欄位完全相符的記錄,Amazon Personalize 只會匯出一筆記錄。如果兩筆記錄具有相同的 ID,但一或多個欄位不同,Amazon Personalize 會根據您選擇匯出的資料包含或移除記錄:

  • 如果您同時匯出大量資料和增量資料,Amazon Personalize 只會匯出具有相同 ID 的最新項目 (在「項目」資料集匯出中),而且只會匯出具有相同 ID 的使用者 (在「使用者」資料集匯出中)。對於項目互動資料集,Amazon Personalize 會匯出所有項目互動資料。

  • 如果您只匯出增量資料,Amazon Personalize 會匯出您個別匯入的所有項目、使用者或項目互動資料,包括具有相同項目的項目或使用者IDs。僅排除與所有欄位完全相符的記錄。

  • 如果您僅匯出大量資料,Amazon Personalize 會包含您大量匯入的所有項目、使用者或項目互動資料,包括具有相同項目的項目或使用者IDs。僅排除與所有欄位完全相符的記錄。

若要匯出資料集,您需要建立資料集匯出工作。資料集匯出任務是一種記錄匯出工具,可將資料集中的記錄輸出到 Amazon S3 儲存貯體中的一或多個CSV檔案。輸出CSV檔案包含一個標題列,其資料欄名稱與資料集結構描述中的欄位相符。

資料集匯出工作權限需求

若要匯出資料集,Amazon Personalize 需要將檔案新增至 Amazon S3 儲存貯體的權限。若要授予許可,請將新的 AWS Identity and Access Management (IAM) 政策附加到 Amazon Personalize 服務角色,以授予角色在儲存貯體上使用PutObjectListBucket動作的權限,並將儲存貯體政策附加到您的輸出 Amazon S3 儲存貯體,以授予 Amazon Personalize 原則使用PutObjectListBucket動作的權限。

如果您使用 AWS Key Management Service (AWS KMS) 進行加密,則必須授予 Amazon Personalize 和您的 Amazon Personalize IAM 服務角色權限,才能使用金鑰。如需詳細資訊,請參閱授予亞馬遜個性化許可以使用您的AWS KMS密鑰

匯出資料集的服務角色原則

下列範例政策授予您的 Amazon Personalize 服務角色使用PutObjectListBucket動作的權限。替換amzn-s3-demo-bucket為輸出存儲桶的名稱。如需有關將原則附加至IAM服務角色的資訊,請參閱將 Amazon S3 政策附加到您的 Amazon Personalize 化服務角色

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

用於匯出資料集的 Amazon S3 儲存貯體政策

下列範例政策授予 Amazon Personalize 權限,以便在 Amazon S3 儲存貯體上使用PutObjectListBucket動作。用您的儲存貯體名稱取代 amzn-s3-demo-bucket。如需將 Amazon S3 儲存貯體政策新增至儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的使用 Amazon S3 主控台新增儲存貯體政策。

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

建立資料集匯出工作

您可以使用 Amazon Personalize 主控台 AWS Command Line Interface (AWS CLI) 或建立資料集匯出任務 AWS SDKs。

將資料匯入資料集並建立輸出 Amazon S3 儲存貯體之後,您可以將資料匯出到儲存貯體以進行分析。若要使用 Amazon Personalize 主控台匯出資料集,請建立資料集匯出任務。如需建立 Amazon S3 儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的建立儲存體。

匯出資料集之前,請確定您的 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. 如果您使用 AWS KMS 的是加密,對於KMS金鑰 ARN,請輸入金 AWS KMS 鑰的 Amazon 資源名稱 (ARN)。

  11. 對於「匯出資料類型」,請根據您最初匯入資料的方式選擇要匯出的類型資料。

    • 選擇「大量」,只匯出您使用資料集匯入工作大量匯入的資料。

    • 選擇「增量」,僅匯出您使用主控台或PutEventsPutUsers、或PutItems作業個別匯入的資料。

    • 選擇「兩者」以匯出資料集中的所有資料。

  12. 對於「標籤」,選擇性地新增任何標籤 如需標記 Amazon Personalize 資源的詳細資訊,請參閱標記 Amazon Personalize 化資

  13. 選擇建立資料集匯出工作

    在 [資料集概觀] 頁面的 [資料集] 匯出工作中,會列出具有 [匯出] 工作狀態的工作。狀態為時,資料集匯出工作即完成ACTIVE。然後,您可以從輸出的 Amazon S3 儲存貯體下載資料。如需從 Amazon S3 儲存貯體下載物件的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的下載物件。

將資料匯入資料集並建立輸出 Amazon S3 儲存貯體之後,您可以將資料集匯出到儲存貯體以進行分析。若要使用匯出資料集 AWS CLI,請使用create-dataset-export-job AWS CLI 指令建立資料集匯出工作。如需建立 Amazon S3 儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的建立儲存體。

匯出資料集之前,請確定 Amazon Personalize 服務角色可以存取並寫入輸出 Amazon S3 儲存貯體。請參閱 資料集匯出工作權限需求

以下是 create-dataset-export-job AWS CLI 命令的範例。為任務命名,取代dataset arn為您要匯出的資料集的 Amazon 資源名稱 (ARN),然後取代role ARN為您在中建立ARN的 Amazon Personalize 服務角色為 Amazon Personalize 化創建 IAM 角色。在中s3DataDestination,針對kmsKeyArn選擇性地提ARN供您的 AWS KMS 金鑰,並path提供輸出 Amazon S3 儲存貯體的路徑。

對於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 S3 儲存貯體之後,您可以將資料集匯出到儲存貯體以進行分析。若要使用匯出資料集 AWS SDKs,請使用作業建立資料集匯出工CreateDatasetExportJob作。如需建立 Amazon S3 儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的建立儲存體。

下列程式碼會示範如何建立使用 Python (Boto3) 或 Java 2.x 的資料集匯出工作。SDK SDK SDK

匯出資料集之前,請確定 Amazon Personalize 服務角色可以存取並寫入輸出 Amazon S3 儲存貯體。請參閱 資料集匯出工作權限需求

SDK for Python (Boto3)

使用以下指令create_dataset_export_job將資料集中的資料匯出到 Amazon S3 儲存貯體。為任務命名,取代dataset arn為您要匯出的資料集的 Amazon 資源名稱 (ARN),然後取代role ARN為您在中建立ARN的 Amazon Personalize 服務角色為 Amazon Personalize 化創建 IAM 角色。在中s3DataDestination,針對kmsKeyArn選擇性地提ARN供您的 AWS KMS 金鑰,並path提供輸出 Amazon S3 儲存貯體的路徑。

對於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、匯出任務的名稱、要匯出的資料集、擷取模式、輸出 Amazon S3 儲存貯體的路徑,以及 AWS KMS 金鑰ARN的。ARN

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()); } }