在亚马逊上使用 Apache Spark SageMaker - Amazon SageMaker

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

在亚马逊上使用 Apache Spark SageMaker

本节为想要使用 Apache Spark 预处理数据和使用 Amazon 进行模型训练和托管SageMaker的开发人员提供信息。有关支持的 Apache Spark 版本的信息,请参阅 Spark GitHub 存储库中的 “获取 SageMaker Sp SageMaker ark” 页面。

SageMaker 在 Python 和 Scala 中都提供一个 Apache Spark 库,该库能让您通过使用 Spark 集群中的 org.apache.spark.sql.DataFrame 数据帧在 SageMaker 中轻松地训练模型。在模型训练后,您还可以使用 SageMaker 托管服务来托管模型。

SageMaker Spark 库 com.amazonaws.services.sagemaker.sparksdk 提供以下类及其他类:

  • SageMakerEstimator—扩展接org.apache.spark.ml.Estimator口。您可以在 SageMaker 中使用此评估程序进行模型训练。

  • KMeansSageMakerEstimatorPCASageMakerEstimator、和 XGBoostSageMakerEstimator —扩展SageMakerEstimator班级。

  • SageMakerModel—扩展了org.apache.spark.ml.Model班级。您可以在 SageMaker 中使用此 SageMakerModel 进行模型托管并获取推理。

使用 SageMaker Studio,您可以轻松连接到亚马逊 EMR 集群。有关更多信息,请参阅使用 Studio 笔记本大规模准备数据

下载 SageMaker Spark 库

您可以使用以下选项来下载 Spark SageMaker 提供的库:

  • 你可以从 SageMakerSpark GitHub 存储库下载这两个库PySpark和 Scala 库的源代码。

  • 对于 Python Spark 库,您有以下附加选项:

    • 使用 pip install:

      pip install sagemaker_pyspark
    • 在笔记本实例中,创建一个使用Sparkmagic (PySpark)Sparkmagic (PySpark3)内核的新笔记本并连接到远程 Amazon EMR 集群。

      注意

      EMR 集群必须使用附加了AmazonSageMakerFullAccess策略的 IAM 角色进行配置。有关为 EMR 集群配置角色的信息,请参阅 Amazon EMR 管理指南中的为 Amazon EMR AWS 服务权限配置 I A M 角色

       

  • 您可以从 Maven 获取 Scala 库。通过向 pom.xml 文件添加以下依赖项,将 Spark 库添加到项目中:

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>

将您的 Apache Spark 应用程序与 SageMaker 集成

以下是将 Apache Spark 应用程序与 SageMaker 集成的步骤的高度概括。

  1. 继续使用您熟悉的 Apache Spark 进行数据预处理。您的数据集仍然是 Spark 集群中的 DataFrame。将您的数据加载到 DataFrame 中并对其进行预处理,从而获得一个 featuresorg.apache.spark.ml.linalg.VectorDoubles 列,以及一个可选的值为 label​ 类型的 Double 列。

  2. 使用 SageMaker Spark 库中的评估程序训练您的模型。例如,如果您选择 SageMaker 提供的 k-means 算法进行模型训练,则可以调用 KMeansSageMakerEstimator.fit 方法。

    提供您的 DataFrame 作为输入。评估程序返回一个 SageMakerModel 对象。

    注意

    SageMakerModel 扩展 org.apache.spark.ml.Model

    fit 方法执行以下操作:

    1. 通过从输入DataFrame中选择featureslabel列并将 protobuf 数据上传到 Amazon S3 存储桶DataFrame,将输入转换为 protobuf 格式。protobuf 格式对于 SageMaker 中的模型训练是有效的。

    2. SageMaker通过发送SageMakerCreateTrainingJob请求开始模型训练。模型训练完成后,SageMaker 会将模型构件保存到 S3 存储桶中。

      SageMaker扮演您为模型训练指定的 IAM 角色来代表您执行任务。例如,它使用角色从 S3 存储桶读取训练数据并将模型构件写入存储桶。

    3. 创建并返回一个 SageMakerModel 对象。该构造函数执行以下任务,这些任务与将模型部署到 SageMaker 中相关。

      1. 向 SageMaker 发送 CreateModel 请求。

      2. 向 SageMaker 发送 CreateEndpointConfig 请求。

      3. 向 SageMaker 发送 CreateEndpoint 请求,该请求随后会启动指定的资源,并在其上托管模型。

  3. 您使用 SageMakerModel.transform 从您在的 SageMaker 中托管的模型获取推理。

    提供具有特征的输入 DataFrame 作为输入。transform 方法将其转换为一个包含推理的 DataFrame。在内部,transform 方法向 InvokeEndpoint SageMaker API 发送请求以获取推理。transform 方法将推理附加到输入 DataFrame 中。