将 Apache Spark 与 Amazon SageMaker 结合使用
本节为希望使用 Apache Spark 进行数据预处理和 Amazon SageMaker 进行模型训练和托管的开发人员提供信息。有关支持的 Apache Spark 版本的信息,请参阅 SageMaker Spark GitHub 存储库中的获取 SageMaker Spark
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 中使用此估算器进行模型训练。 -
KMeansSageMakerEstimator
、PCASageMakerEstimator
和XGBoostSageMakerEstimator
- 扩展SageMakerEstimator
类。 -
SageMakerModel
- 扩展org.apache.spark.ml.Model
类。您可以在 SageMaker 中使用此SageMakerModel
进行模型托管并获取推理。
使用 SageMaker Studio,您可以轻松连接到 Amazon EMR 集群。有关更多信息,请参阅使用 Studio 笔记本大规模准备数据。
下载 SageMaker Spark 库
您可以使用以下选项来下载 SageMaker 提供的 Spark 库:
-
您可以从 SageMaker Spark
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 对 Amazon 服务的权限配置 IAM 角色。
-
-
您可以从 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 集成的步骤的高度概括。
-
继续使用您熟悉的 Apache Spark 进行数据预处理。您的数据集仍然是 Spark 集群中的
DataFrame
。将您的数据加载到DataFrame
中并对其进行预处理,从而获得一个features
为org.apache.spark.ml.linalg.Vector
的Doubles
列,以及一个可选的值为label
类型的Double
列。 -
使用 SageMaker Spark 库中的估算器训练您的模型。例如,如果您选择 SageMaker 提供的 k-means 算法进行模型训练,则可以调用
KMeansSageMakerEstimator.fit
方法。提供您的
DataFrame
作为输入。评估程序返回一个SageMakerModel
对象。注意
SageMakerModel
扩展org.apache.spark.ml.Model
。fit
方法执行以下操作:-
通过从输入
DataFrame
中选择features
和label
列,并将 protobuf 数据上传到 Amazon S3 存储桶,将输入DataFrame
转换为 protobuf 格式。protobuf 格式对于 SageMaker 中的模型训练是有效的。 -
通过发送 SageMaker
CreateTrainingJob
请求,在 SageMaker 中启动模型训练。模型训练完成后,SageMaker 会将模型构件保存到 S3 存储桶中。SageMaker 代入您为模型训练指定的 IAM 角色以代表您执行任务。例如,它使用角色从 S3 存储桶读取训练数据并将模型构件写入存储桶。
-
创建并返回一个
SageMakerModel
对象。该构造函数执行以下任务,这些任务与将模型部署到 SageMaker 中相关。-
向 SageMaker 发送
CreateModel
请求。 -
向 SageMaker 发送
CreateEndpointConfig
请求。 -
向 SageMaker 发送
CreateEndpoint
请求,该请求随后会启动指定的资源,并在其上托管模型。
-
-
-
您使用
SageMakerModel.transform
从您在的 SageMaker 中托管的模型获取推理。提供具有特征的输入
DataFrame
作为输入。transform
方法将其转换为一个包含推理的DataFrame
。在内部,transform
方法向InvokeEndpoint
SageMaker API 发送请求以获取推理。transform
方法将推理附加到输入DataFrame
中。