使用Spark SQL进行流式机器学习计算

今天来和大家聊一下如何使用Spark SQL进行流式数据的机器学习处理。本文主要分为以下几个章节:

  • 什么是流式机器学习
  • 机器学习模型获取途径
  • 系统演示

1. 什么是流式机器学习

通常,当我们听到有人提到实时数据机器学习时,其实他们是讨论:

  • 他们希望有一个模型,这个模型利用最近历史信息来进行预测分析。举一个天气的例子,如果最近几天都是晴天,那么未来几天极小概率会出现雨雪和低温天气
  • 这个模型还需要是可更新的。当数据流经系统时,模型是可以随之进化升级。举个例子,随着业务规模的扩大,我们希望零售销售模型仍然保持准确。

第一个例子我们可以将它归为时序预测。第二个例子中,模型需要更新或者重新训练,这是一个non-stationarity问题。时序预测和non-stationarity数据分布是两类不同的问题。本文主要关注第二类问题,对于这类问题,一般的解决方案主要有:

  • 增量式算法:有一些算法支持通过数据逐步学习。也就是说,每次进来一些新的数据时,模型会被更新。SVM,神经网络等算法都有增量式版本,此外贝叶斯网络也可以用作增量学习。
  • 周期重新学习:一个更加直接的方法就是用一批最新数据重新训练我们的模型。这种方法可以用到的绝大多数的算法上。

2. 机器学习模型获取途径

实时机器学习应用分成两块,一部分是模型实时训练,另一部分是数据实时预测分析。现实中,我们可能没法实现模型的实时训练,只能退而求其次地使用已经训练好模型。这些模型可能会周期性地使用历史数据训练更新一次。所以,我们可以根据实际的算法和模型时效性要求,来选择实时训练模型还是使用预训练好的模型。

  • 模型算法支持增量训练:可以选择用流式数据实时训练更新
  • 模型算法不自持增量训练:可以选择用离线数据预先训练好模式

回到主题上,我们要实现使用Spark SQL进行流式机器学习。前面几篇文章已经简单介绍了EMR如何使用Spark SQL进行流式ETL处理。既然要进行机器学习,我们很自然地想到Spark MLlib。DataBricks有篇文档介绍了在Spark Structured Streaming进行机器学习,大家有兴趣的可以看下。如果想将Spark MLlib应用到Spark SQL上,我们可以简单地将MLlib算法包装成UDF使用。另外一个模型获取途径是利用阿里云上的一些在线机器学习服务,我们可以将在线机器学习服务使用UDF封装后使用。

  • 使用UDF封装现有的Spark MLlib算法
  • 使用UDF封装阿里云在线机器学习服务

限于篇幅,我会分两篇文章分别介绍这两个方式,本文将简单介绍如何利用Spark MLlib进行流式机器学习。

3. 系统演示

本节,我们将演示一下如何利用逻辑回归算法进行演示。

3.1 系统架构
下面这张图展示了整个实时监测系统的架构,前端接LogService数据,实时监测分析结果写入到RDS,最后通过DataV展示出来。
image

3.2 测试数据集
测试数据集使用Spark自带的sample_libsvm_data.txt,我们要做的是写一个数据生成器,将数据集的数据不断地向SLS中发送,模拟流式数据。

算法模型准备
Spark MLlib提供了大量的机器学习算法实现,可以方便的再RDD或者DataFrame API上使用,但是无法直接用在SQL API上,所以我们需要使用UDF来封装一下。这里,我们选用逻辑回归算法,具体的实现就不细说了,可以参考这里的代码:LogisticRegressionUDF.scala

转载于:https://my.oschina.net/u/3650035/blog/3069088

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值