在最后一部分中,我们将讨论一个演示应用程序,该应用程序使用PySpark.ML根据Cloudera的运营数据库(由Apache HBase驱动)和Apache HDFS中存储的训练数据来建立分类模型。然后,对该模型进行评分并通过简单的Web应用程序提供服务。有关更多上下文,此演示基于此博客文章如何将ML模型部署到生产中讨论的概念。
在阅读本部分之前,请确保已阅读第1部分和第2部分。第1部分:使用PySpark和Apache HBase, 以及第2部分:使用PySpark和Apache HBase。
背景/概述
机器学习现已用于解决许多实时问题。一个大的用例是传感器数据。公司现在使用这种类型的数据实时通知消费者和员工。这些公司的另一个重要需求是,在实时提供更多数据时,可以轻松地改进其模型。
一种特定的用例是检测欺诈性的信用卡交易。例如,给定一笔交易,假设一个ML模型预测这是一次欺诈交易。在员工确认该交易实际上是欺诈之后,该员工可以让系统知道该模型做出了正确的预测,然后可以将该预测用作改进基础模型的附加训练数据。
以此示例为灵感,我决定建立传感器数据并实时提供模型结果。结果,我决定使用开源的“占用检测数据集”来构建此应用程序。训练数据集代表办公室的传感器数据,并使用该数据构建模型来预测该房间是否有人居住。在接下来的几节中,我们将讨论训练数据模式,分类模型,批次分数表和Web应用程序。
在HBase和HDFS中训练数据
这是训练数据的基本概述:
如您所见,共有7列,其中5列是传感器读数(温度,湿度比,湿度,CO2,光)。占用率列表示模型是否被占用(1表示它已被占用,0表示它未被占用),这就是模型将要预测的内容。还有一个“日期”列,但是此演示模型不使用此列,但是任何时间戳都将有助于训练一个模型,该模型应根据一天中的时间考虑季节变化或AC / HS峰值。
在此演示中,此训练数据的一半存储在HDFS中,另一半存储在HBase表中。该应用程序首先将HDFS中的数据加载到PySpark DataFrame中,然后将其与其余训练数据一起插入到HBase表中。这使我们可以将所有训练数据都放在一个集中的位置,以供我们的模型使用。
合并两组训练数据后,应用程序将通过PySpark加载整个训练表并将其传递给模型。
建立模型
现在我们有了所有训练数据,我们将建立并使用PySpark ML模型。
该模型使用线性回归对房间是否被占用进行分类。完成此操作后,我们将使用BinaryClassificationEvaluator()和TrainValidationSplit()正确评估和拆分模型数据。完成此操作后,我们将使用HBase的训练数据对模型进行拟合。
该代码段最终为我返回了一个ML模型,其中给了我5组传感器输入,它将返回一个二进制数预测,其中1代表“已占用”,0代表“未占用”
创建和存储批次分数表
现在已经创建了一个简单的模型,我们需要对该模型进行评分。为此,我在HBase中创建了一个批次评分表。批处理得分表是一个表,其中存储了所有可能的传感器输入组合以及使用该模型对每个组合的预测。完成该预计算以便以ms延迟提供结果。我的应用程序使用PySpark创建所有组合,对每个组合进行分类,然后构建要存储在HBase中的DataFrame。
HBase可以轻松存储具有数万亿行的批处理得分表,但是为简单起见,此应用程序存储了25万个得分组合/行。该表可以大规模扩展到任何用例,这就是为什么HBase在此应用程序中具有优越性,因为它是分布式、可伸缩的大数据存储。
服务模型
为了使用此数据,我使用流行的Flask框架构建了一个非常简单的演示,用于构建Web应用程序。此Web应用程序基本上有两个目标。首先,通过实时流数据显示房间是否被占用。其次,添加一个功能,当用户确认占用预测正确时,将其添加到训练数据中。
为了模拟实时流数据,我每5秒在Javascript中随机生成一个传感器值。生成新数字后,Web应用程序将在HBase的Batch Score Table中进行简单查找以获取预测。这个简单的查询是通过PySpark.SQL查询完成的,一旦查询检索到预测,它就会显示在Web应用程序上。
在演示应用程序中,还有一个按钮,允许用户随时将数据添加到HBase中的训练数据表中。以下是演示应用程序的简单屏幕录像。
如何运行此演示应用程序
现在,如果您想在CDSW中运行并模拟该演示应用程序,请按以下步骤操作:
- 确保已配置PySpark和HBase –作为参考,请参阅第1部分
- 在CDSW上创建一个新项目,然后在“初始设置”部分下选择“ Git”
- 使用“ https://github.com/mchakka/PySpark-HBaseDemoApp.git ”作为Git URL
- 使用Python3创建一个新会话
- 在CDSW项目上运行preprocessing.py
- 这会将所有训练数据放入HBase
- 在CDSW项目上上传并运行main.py
- 创建模型
- 构建和评分批次评分表
- 将批次分数表存储在HBase中
- 在CDSW项目上上传并运行app.py
为了查看Web应用程序,请访问 http://<$CDSW_ENGINE_ID>.<$CDSW_DOMAIN>
结论与总结
此应用程序演示了如何利用PySpark来使用HBase作为基础存储系统来构建简单的ML分类模型。无论如何,该演示应用程序都有一些收获。
- 对于HBase中已经存在的数据,PySpark允许在任何用例中轻松访问和处理。
- 通过PySpark,可以从多个来源访问数据
- 服务ML应用程序通常需要可伸缩性,因此事实证明HBase和PySpark可以满足该要求。
现在,任何数据科学家和数据工程师都可以直接在HBase数据上构建ML模型。使用第1部分和第2部分中的方法,“ hbase-connectors”现在可以轻松实现python访问以及强大的针对HBase数据的Spark功能。
自己尝试这个演示应用程序!GitHub Repo链接
原文作者:Manas Chakka
原文链接:https://blog.cloudera.com/building-a-machine-learning-application-with-cloudera-data-science-workbench-and-operational-database-part-3-productionization-of-ml-models/