基于大数据的Uber数据实时监控(Part 1:Spark机器学习)

导言


据Gartner称:到2020年,25亿辆联网汽车将成为物联网的主要对象。联网车辆预计每小时可以生成25GB的数据,对这些数据进行分析实现实时监控。大数据目前是10个主要领域之一,利用它可以使城市更加智能。例如,对GPS汽车数据的分析可以实现城市实时交通流量的优化。


Uber正在利用大数据完善它们的流程,从计算定价到寻找汽车的最佳定位都争取实现利润最大化。在这一系列的文章中,我们将使用公共Uber旅行数据来讨论构建分析和监控汽车GPS数据的实时示例。机器学习通常有两个阶段,包括实时数据:

  • 数据发现第一阶段涉及分析历史数据以构建机器学习模型;

  • 使用该模型进行分析第二阶段在现场活动中使用该模型;(Spark确实提供了一些流媒体机器学习算法,但仍然经常需要对历史数据进行分析。)

    640?wx_fmt=jpeg


这是系列文章的第一篇,我们将一起开始使用Apache Spark的机器学习K-means算法根据位置聚类Uber数据。

聚类


Google新闻使用集群技术,根据标题和内容将新闻报道分为不同的类别。聚类算法发现数据集合中出现的分组。

640?wx_fmt=png


在聚类中,算法通过分析输入示例之间的相似性将对象分组。群集的示例包括:

  • 搜索结果分组;

  • 客户分组;

  • 异常检测;

  • 文本分类;

    640?wx_fmt=png


聚类使用无监督算法,对输入数据不提前标记。

640?wx_fmt=png

K-means是最常用的聚类算法之一,它将数据点聚类成预定数量的聚类(k)。使用K-means算法进行聚类首先将所有坐标初始化为k个质心。随着每次使用算法,每个点基于一些距离度量被分配到其最近的质心,该距离度量通常是Euclidean距离。然后,将质心更新为该通道中分配给它的所有点的“中心”,这种情况一直重复,直到中心发生最小变化。

示例数据集


示例的数据集是Uber旅行数据,从NYC Taxi & Limousine Commission获得的FiveThirtyEight数据。在这个例子中,我们将根据经度和纬度发现Uber数据的集群,然后将按日期/时间分析集群中心。数据集具有以下模式:

1、Date/Time:Uber的日期和时间;

2、Lat:Uber的纬度;

3、Lon:Uber的经度

4、Base:隶属于Uber的TLC公司;

数据记录采用CSV格式。如下所示:

 
 
12014-08-01 00:00:00,40.729,-73.9422,B025982014-08-01 000000,40.729,-73.9422,B02598

示例代码


先导入Spark ML K-means和SQL所需的包。

640?wx_fmt=png


使用Spark Structype指定模式(如果你使用的是笔记本,则不必创建SQLContext)。

640?wx_fmt=png


接下来,将CSV文件中的数据加载到Spark DataFrame中。

640?wx_fmt=png


使用Spark 1.6 packages com.databricks:spark-csv_2.10:1.5.0,从CSV文件数据源创建DataFrame,并使用架构。

640?wx_fmt=png


或者使用Spark 2.0,可以指定要加载到DataFrame中的数据源和架构,如下所示:

640?wx_fmt=png


对于Spark 2.0,在将数据加载到DataFrame时指定模式将提供比模式推断更好的性能。DataFrame printSchema() 以树形格式将模式打印到控制台,如下所示:

640?wx_fmt=png


DataFrame show() 显示前20行:

640?wx_fmt=png

定义要素数组


为了使机器学习算法使用这些特征,将特征变换并放入特征向量中,特征向量是表示每个特征的值的数字向量。下面,VectorAssembler用于转换并返回包含向量列中所有要素列的新DataFrame。

640?wx_fmt=png

640?wx_fmt=png


输出df2.show

640?wx_fmt=png


接下来,我们创建一个KMeans对象,设置参数以定义簇的数量和确定簇的最大迭代次数,并使模型适合输入数据。

640?wx_fmt=png

640?wx_fmt=png


模型输出clusterCenters

640?wx_fmt=png


下面,群集中心显示在Google地图上:

640?wx_fmt=png


接下来,我们使用该模型获取测试数据的集群,以便进一步分析集群。

640?wx_fmt=png

640?wx_fmt=png


现在我们可以提出一些问题,例如“一天中哪个时间和哪个集群载客次数最多?”

640?wx_fmt=png


每个集群中发了了多少次?

640?wx_fmt=png


如果使用Zeppelin笔记本,我们还可以在条形图或图表中显示查询结果。下面,x轴是小时,y轴是计数,颜色代表不同的簇。

640?wx_fmt=png


例如,你可以使用给定的名称将DataFrame注册为临时表df.registerTempTable("uber"),然后使用提供的的SQL方法运行SQL语句sqlContext。以下是Zeppelin笔记本中的一个示例。

640?wx_fmt=png

640?wx_fmt=png


该模型可以持久的保存在磁盘,如下所示,以便以后使用(如,使用Spark Streaming)。

640?wx_fmt=png

系列指南


  • 使用Apache API监控实时Uber数据,第1部分:Spark机器学习

  • 使用Apache API监控实时Uber数据,第2部分:Kafka和Spark Streaming

  • 使用Apache API监控实时Uber数据,第3部分:使用Vert.x的实时仪表板

  • 使用Apache API监控实时Uber数据,第4部分:Spark Streaming,DataFrames和HBase

长按订阅↓

640?wx_fmt=jpeg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值