学会用Spark实现朴素贝叶斯算法

编者按:本文作者汪榕曾写过一篇文章:《以什么姿势进入数据挖掘会少走弯路》,是对想入行大数据的读者的肺腑之言,其中也表达了作者的一些想法,希望大家不要随便去上没有结合业务的收费培训班课程;而后,他有了结合他本人的工作经验,写一系列帮助大家进行实践学习课程文章的想法,InfoQ也觉得这是件非常有意义的事情,特别是对于大数据行业1-3年工作经验的人士,或者是没有相关工作经验但是想入行大数据行业的人。课程的名称是“数据挖掘与数据产品的那些事”,目的是:1. 引导目标人群正确学习大数据挖掘与数据产品;2. 协助代码能力薄弱的学习者逐渐掌握大数据核心编码技巧;3. 帮助目标人群理解大数据挖掘生态圈的数据流程体系;4. 分享大数据领域实践数据产品与数据挖掘开发案例;5.交流大数据挖掘从业者职业规划和发展方向。这系列文章会在InfoQ上形成一个专栏,本文是专栏的第二篇。

第一部分:回顾以前的一篇文章

简单之极,搭建属于自己的Data Mining环境(Spark版本)很多朋友也亲自动手搭建了一遍,当然也遇到不少困难,我都基本一对一给予了回复,具体可以查看原文。

相关厂商内容

福利/点击参与抽奖无人机、kindle、爱奇艺全年会员

付钱拉开发者支持大礼包速领!!

支付系统架构那点事-上篇

你不得不知的聚合支付的魅力和前景

相关赞助商

为中小微企业提供一站式金融服务解决方案!

下面的实践也主要是基于上述部署的环境来进行开发。

第二部分:初步学习Spark与数据挖掘相关的核心知识点

对于这部分的介绍,不扩展到Spark框架深处,仅仅介绍与大数据挖掘相关的一些核心知识,主要分了以下几个点:

初步了解spark

  1. 适用性强:它是一种灵活的框架,可同时进行批处理、 流式计算、 交互式计算。
  2. 支持语言:目前spark只支持四种语言,分别为java、python、r和scala。但是个人推荐尽量使用原生态语言scala。毕竟数据分析圈和做数据科学研究的人群蛮多,为了吸引更多人使用spark,所以兼容了常用的R和python。

与MapReduce的差异性

  1. 高效性:主要体现在这四个方面,提供Cache机制减少数据读取的IO消耗、DAG引擎减少中间结果到磁盘的开销、使用多线程池模型来减少task启动开销、减少不必要的Sort排序和磁盘IO操作。
  2. 代码简洁:解决同一个场景模型,代码总量能够减少2~5倍。从以前使用MapReduce来写模型转换成spark,这点我是切身体会。

理解spark离不开读懂RDD

  • spark2.0虽然已经发测试版本和稳定版本,但是迁移有一定成本和风险,目前很多公司还处于观望阶段。
  • RDD(Resilient Distributed Datasets), 又称弹性分布式数据集。
  • 它是分布在集群中的只读对象集合(由多个Partition构成)。
  • 它可以存储在磁盘或内存中(多种存储级别),也可以从这些渠道来创建。
  • spark运行模式都是通过并行“转换” 操作构造RDD来实现转换和启动。同时RDD失效后会自动重构。

从这几个方面理解RDD的操作

  1. Transformation,可通过程序集合、Hadoop数据集、已有的RDD,三种方式创造新的RDD。这些操作都属于Transformation(map, filter, groupBy, reduceBy等)。
  2. Action,通过RDD计算得到一个或者一组值。这些操作都属于Action(count, reduce, saveAsTextFile等)。
  3. 惰性执行:Transformation只会记录RDD转化关系,并不会触发计算。Action是触发程序执行(分布式) 的算子。

一张图概括RDD

知晓Spark alt="" width="550" />

一张图知晓运作模式

懂得spark本地模式和yarn模式的提交方式(不讨论Standalone独立模式)

如果说上述的概念、执行流程和运作方式目的在于给做大数据挖掘的朋友一个印象,让大家不至于盲目、错误的使用spark,从而导致线上操作掉坑。那最后的本地模式测试和集群任务提交是必须要掌握的知识点。