2019-06-13 20:44:36 weixin_44545253 阅读数 643
  • Spark快速大数据处理

    课程的主要内容包括: 1.ZooKeeper-分布式过程协同组件 2.Hadoop3-大数据基础组件 3.Tez-Yarn底层计算引擎 4.Hive3-大数据仓库 5.Spark2实时大数据处理 6.Oozie5-大数据流程引擎 课程特点: 1.最新API: Hadoop3/Spark2/Hive3/Oozie5 2.手工搭建集群环境:编译+搭建 3.配套资源:分阶段镜像+课件+安装资源,其中安装资源包括案例源码、脚本等 4.案例为主:分模块案例+天池数据分析竞赛 5.故障教学 6.完整实战项目:天池数据分析

    12350 人正在学习 去看看 余海峰

下载链接:Spark高级数据分析

带完整书签:
在这里插入图片描述

2017-08-15 18:33:09 qq_33813365 阅读数 4210
  • Spark快速大数据处理

    课程的主要内容包括: 1.ZooKeeper-分布式过程协同组件 2.Hadoop3-大数据基础组件 3.Tez-Yarn底层计算引擎 4.Hive3-大数据仓库 5.Spark2实时大数据处理 6.Oozie5-大数据流程引擎 课程特点: 1.最新API: Hadoop3/Spark2/Hive3/Oozie5 2.手工搭建集群环境:编译+搭建 3.配套资源:分阶段镜像+课件+安装资源,其中安装资源包括案例源码、脚本等 4.案例为主:分模块案例+天池数据分析竞赛 5.故障教学 6.完整实战项目:天池数据分析

    12350 人正在学习 去看看 余海峰

大礼包内含书目:

Apache Spark源码剖析.pdf
深入理解Spark:核心思想与源码分析.pdf
Spark快速大数据分析.pdf
Spark高级数据分析.pdf
数据算法--Hadoop-Spark大数据处理技巧
Spark大数据处理:技术、应用与性能优化(全).pdf
Spark技术内幕  深入解析Spark内核架构设计与实现原理.pdf

下载地址:
http://pan.baidu.com/s/1c1GB56K

2018-11-06 11:55:07 valada 阅读数 1393
  • Spark快速大数据处理

    课程的主要内容包括: 1.ZooKeeper-分布式过程协同组件 2.Hadoop3-大数据基础组件 3.Tez-Yarn底层计算引擎 4.Hive3-大数据仓库 5.Spark2实时大数据处理 6.Oozie5-大数据流程引擎 课程特点: 1.最新API: Hadoop3/Spark2/Hive3/Oozie5 2.手工搭建集群环境:编译+搭建 3.配套资源:分阶段镜像+课件+安装资源,其中安装资源包括案例源码、脚本等 4.案例为主:分模块案例+天池数据分析竞赛 5.故障教学 6.完整实战项目:天池数据分析

    12350 人正在学习 去看看 余海峰

内容简介

作为计算框架,Spark 速度快,开发简单,能同时兼顾批处理和实时数据分析,因此很快被广大企业级用户所采纳,并随着近年人工智能的崛起而成为分析和挖掘大数据的重要得力工具。

本书由业内知名数据科学家执笔,通过丰富的示例展示了如何结合 Spark、统计方法和真实世界数据集来解决数据分析问题,既涉及模型的构建和评价,也涵盖数据清洗、数据预处理和数据探索,并描述了如何将结果变为生产应用,是运用 Apache Spark 进行大数据分析和处理的实战宝典。

第2版根据新版 Spark 杰出实践,对样例代码和所用资料做了大量更新。

本书涵盖模式如下:

  • 音乐推荐和 Audioscrobbler 数据集
  • 用决策树算法预测森林植被
  • 基于 K 均值聚类进行网络流量异常检测
  • 基于潜在语义算法分析维基百科
  • 用 GraphX 分析伴生网络
  • 对纽约出租车轨迹进行空间和时间数据分析
  • 通过蒙特卡罗模拟来评估金融风险
  • 基因数据分析和 BDG 项目
  • 用 PySpark 和 Thunder 分析神经图像数据

作者简介

桑迪 · 里扎(Sandy Ryza),Spark 项目代码提交者、Hadoop 项目管理委员会委员,Time Series for Spark 项目创始人。曾任 Cloudera 公司高级数据科学家,现就职于 Remix 公司从事公共交通算法开发。

于里 · 莱瑟森(Uri Laserson),MIT 博士毕业,致力于用技术解决遗传学问题,曾利用 Hadoop 生态系统开发了可扩展的基因组学和免疫学技术。目前是西奈山伊坎医学院遗传学助理教授,曾任 Cloudera 公司核心数据科学家。

肖恩 · 欧文(Sean Owen),Spark、Mahout 项目代码提交者,Spark 项目管理委员会委员。现任 Cloudera 公司数据科学总监。

乔希 · 威尔斯(Josh Wills),Crunch 项目发起人,现任 Slack 公司数据工程主管。曾任 Cloudera 公司高级数据科学总监。

本书内容

推荐序

数据的爆炸式增长和隐藏在这些数据背后的商业价值催生了一代又一代的大数据处理技术。十余年前 Hadoop 横空出世,Doug Cutting 先生将谷歌的 MapReduce 思想用开源的方式实现出来,由此拉开了基于 MapReduce 的大数据处理框架在企业中应用的序幕。近年来,Hadoop 生态系统又发展出以 Spark 为代表的新计算框架。相比 MapReduce,Spark 速度快,开发简单,并且能同时兼顾批处理和实时数据分析。Spark 起源于加州大学伯克利分校的 AMPLab,Cloudera 公司作为大数据市场上的翘楚,很早就开始将 Spark 推广到广大企业级客户并积累了大量的经验。Advanced Analysis with Spark 一书正是这些经验的结晶。另一方面,企业级用户在引入 Spark 技术时碰到的最大难题之一就是能够灵活应用 Spark 技术的人才匮乏。龚少成与图灵公司将 Advanced Analysis with Spark 翻译成中文,让国内读者第一时间用母语感受 Spark 这一新技术在数据分析和处理方面的魔力,实在是国内技术圈的幸事。能为本书作序推荐,也算是为国内企业更好地应用 Spark 技术尽自己的一份力量!

本书开篇介绍了 Spark 的基础知识,然后详细介绍了如何将 Spark 应用到各个行业。与许多图书只着重描述最终方案不同,本书作者在介绍案例时把解决问题的整个过程也展现了出来。在介绍一个主题时,并不是一开始就给出最终方案,而是先给出一个最初并不完善的方案,然后指出方案的不足,引导读者思考并逐步改进,最终得出一个相对完善的方案。这体现了工程问题的解决思路,也体现了大数据分析是一个迭代的过程。这样的论述方式更能激发读者的思考,这一点实在难能可贵。

本书英文版自第 1 版出版以来,在亚马逊网站大数据分析类图书中一直名列前茅,而且获得的多为五星级评价,可见国外读者对该书的喜爱。本书中文版译者龚少成技术扎实,在英特尔和 Cloudera 工作期间带领团队成功实施过许多国内标杆大数据平台项目,最近两年又转战万达科技集团大数据中心从零到一构建 PB 级大数据平台并支撑业务落地,而且其英语功底也相当扎实,此外我偶然得知他还是国内少数通过高级口译考试的专业人才。所以本书的中文版交给龚少成翻译实在是件让人欣慰的事情。本书中文版初稿也证实了我的判断,不仅保持了英文版的风格,而且语言也十分流畅。如果你了解 Scala 语言,还有一些统计学和机器学习基础,那么本书是你学习 Spark 时必备的图书之一!

——苗凯翔,思科中国研发公司首席技术官,前 Cloudera 公司副总裁

译者序

大数据是这几年科技和应用领域炙手可热的话题,而 Spark 又是大数据领域里最活跃的技术。随着人工智能的崛起,业内对大数据的需求不再局限于一般意义上的大数据存储、加工和分析,如何挖掘大数据的潜在价值成为新的热点。本书四位作者均在 Cloudera 公司担任过数据科学家,长期为客户提供专业的数据分析和挖掘服务。可以说,本书的出版将为 Spark 在数据分析和挖掘领域起到巨大的推动作用。

同时我们也注意到,国内介绍 Spark 数据分析方面的图书还比较匮乏,而且许多图书都停留在源代码研究的层面上。当然,这些书中也不乏非常优秀的作品,但我们认为 Spark 真正的力量在于其开发的大数据应用。所以早在本书还处于初期编写过程中时,我们就自告奋勇和作者联系中文版事宜,希望以此为中国的大数据分析事业略尽绵力。

本书在翻译过程中得到了许多人的帮助。首先要感谢我在 Cloudera 公司的前同事,也就是本书的 4 位作者。在本书的翻译过程中,由于不同语言的习惯问题,4 位作者桑迪 • 里扎、于里 • 莱瑟森、肖恩 • 欧文和乔希 • 威尔斯花了许多时间和我交流。本人之所以有幸负责本书的中文版翻译,也是承蒙肖恩 • 欧文的引荐。其次要感谢星环信息科技有限公司创始人孙元浩先生将我带入到大数据这个领域,让我的人生轨迹发生变化;感谢思科中国研发公司首席技术官苗凯翔博士在英特尔和 Cloudera 工作期间曾经给我的指导,让我有了端正的工作态度和价值观;感谢我的前同事田占凤博士和陈建忠的鼓励,中文版的翻译工作才得以开始。同时本书在翻译过程中还得到了 Cloudera 公司中国区前同事刘贺峰、糜君、陈飚、陈新江、李大超和张莉苹的鼎力帮助。感谢图灵公司的李松峰、岳新欣、温雪编辑在翻译过程中的指导和仔细审阅。由于本书的翻译都是在周末完成的,所以特别感谢我的妻子周幼琼在每个周末对我的照顾。

龚少成


首先非常感谢龚少成给我这次机会,使我有幸成为本书第 2 版的译者之一。

其次要感谢英特尔大数据团队的同事们,是你们带领我走进了 Spark 的时代。

最后要感谢我的妻子和孩子对我工作的理解和支持,让我腾出业余时间完成此次翻译工作。

由于译者水平有限,同时本书涉及许多课题,所以现有译文中难免存在纰漏之处。希望读者能够不吝赐教,发现问题时麻烦和译者联系。邮件请发送至 gongshaocheng@gmail.comqiuxin2012cs@gmail.com

邱鑫

自从在加州大学伯克利分校创立 Spark 项目起,我就时常心潮澎湃。不仅因为 Spark 可以帮助人们快速构建并行系统,更因为 Spark 帮助了越来越多的人使用大规模计算。因此看到这本介绍 Spark 高级分析的书,我非常欣慰!该书由数据科学领域 4 位专家桑迪、于里、肖恩和乔希携手打造。4 位作者研习 Spark 已久,他们在本书中跟读者分享了关于 Spark 的大量精彩内容,同时本书的案例部分同样出众!

对于这本书,我最钟爱的是它强调案例,而且这些案例都源于现实数据和实际应用。找到 1 个像样的、能在笔记本电脑上运行的大数据案例已经很难,更遑论 10 个了。但本书作者做到了!作者为大家准备好了一切,只等你在 Spark 中运行它们。更难能可贵的是,作者不仅讨论了核心算法,更倾心于数据准备和模型调优,没有这些工作,实际项目中就无法得到好的结果。认真研读此书,你应该可以吸收这些案例中的概念并直接将其运用在自己的项目中!

大数据处理无疑是当今计算领域最激动人心的方向之一,发展非常迅猛,新思想层出不穷。愿本书能帮助你在这个崭新的领域中扬帆启航!

Matei Zaharia

Databricks 公司 CTO 兼 Apache Spark 项目副总裁

前言

作者:桑迪 • 里扎

我不希望我的人生有很多遗憾。2011 年,某个慵懒的时刻,我正在绞尽脑汁地想如何把高难度的离散优化问题最优地分配给计算机集群处理,真是很难想到有什么好方法。我的导师跟我讲,他听说有个叫 Apache Spark 的新技术,可我基本上没当回事。Spark 的想法太好了,让人觉得有点儿不靠谱。就这样,我很快又回去接着写 MapReduce 的本科毕业论文了。时光荏苒,Spark 和我都渐渐成熟,不过令我望尘莫及的是,Spark 已然成为冉冉之星,这让人不禁感叹“Spark”(星星之火)这个双关语是多么贴切。若干年后,Spark 的价值举世皆知!

Spark 的前辈有很多,从 MPI 到 MapReduce。利用这些计算框架,我们写的程序可以充分利用大量资源,但不需要关心分布式系统的实现细节。数据处理的需求促进了这些技术框架的发展。同样,大数据领域也和这些框架关系密切,这些框架界定了大数据的范围。Spark 有望更进一步,让写分布式程序就像写普通程序一样。

Spark 能大大提升 ETL 流水作业的性能,并把 MapReduce 程序员从每天问天天不灵、问地地不应的绝望痛苦中解救出来。对我而言,Spark 的激动人心之处在于,它真正打开了复杂数据分析的大门。Spark 带来了支持迭代式计算和交互式探索的模式。利用这一开源计算框架,数据科学家终于可以在大数据集上高效地工作了。

我认为数据科学教学最有效的方法是利用实例。为此,我和同事一起编写了这本关于实际应用的书,希望它能涵盖大规模数据分析中最常用的算法、数据集和设计模式。阅读本书时不必一页一页地看,可以根据工作需要或按兴趣直接翻到相关章节。

本书内容

第 1 章结合数据科学和大数据分析的广阔背景来讨论 Spark。随后各章在介绍 Spark 数据分析时都自成一体。第 2 章通过数据清洗这一使用场景来介绍用 Spark 和 Scala 进行数据处理的基础知识。接下来几章深入讨论如何将 Spark 用于机器学习,介绍了常见应用中几个最常用的算法。其余几章则收集了一些更新颖的应用,比如通过文本隐含语义关系来查询 Wikipedia 或分析基因数据。

第2版说明

自本书第 1 版出版以来,Spark 进行了一次重大的版本更新:使用了一个全新的核心 API; MLlib 和 Spark SQL 两个子项目也发生了翻天覆地的变化。第 2 版根据新版 Spark 的最佳实践,对样例代码和所使用的资料进行了大量更新。

使用代码示例

补充材料(代码示例、练习、勘误表等)可以从 https://github.com/sryza/aas 下载 {1[本书中文版勘误提交及资料下载,请访问本书图灵社区页面:

http://www.ituring.com.cn/book/2039。——编者注]}。

本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。比如,用本书的几个代码片段写一个程序就无须获得许可,销售或分发 O'Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无须获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。

我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和 ISBN。比如:“Advanced Analytics with Spark by Sandy Ryza, Uri Laserson, Sean Owen, and Josh Wills (O'Reilly). Copyright 2015 Sandy Ryza, Uri Laserson, Sean Owen, and Josh Wills, 978-1-491-91276-8.”

如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过 permissions@oreilly.com 与我们联系。

O'Reilly Safari

{40%}

Safari(前身为 Safari Books Online)是为企业、政府、教育机构和个人提供的会员制培训和参考平台。

会员可以访问来自 250 多家出版商的上千种图书、培训视频、学习路径、互动教程和精选播放列表。这些出版商包括 O'Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology,等等。

欲知更多信息,请访问 https://www.safaribooksonline.com/

联系我们

请把对本书的评价和问题发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

  北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

  奥莱利技术咨询(北京)有限公司

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:

http://shop.oreilly.com/product/0636920056591.do

对于本书的评论和技术性问题,请发送电子邮件到:

  bookquestions@oreilly.com

要了解更多 O'Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:

  http://www.oreilly.com

我们在 Facebook 的地址如下:

  https://facebook.com/oreilly

请关注我们的 Twitter 动态:

  https://twitter.com/oreillymedia

我们的 YouTube 视频地址如下:

  https://www.youtube.com/oreillymedia

致谢

如果没有 Apache Spark 和 MLlib,就没有本书。所以我们应该感谢开发了 Spark 和 MLlib 并将其开源的团体,也要感谢那些添砖加瓦的数以百计的代码贡献者。

我们还要感谢本书的每一位审阅者,感谢他们花费了大量的时间来审阅本书的内容,感谢他们的专业视角,他们是 Michael Bernico、Adam Breindel、Ian Buss、Parvis Deyhim、Jeremy Freeman、Chris Fregly、Debashish Ghosh、Juliet Hougland、Jonathan Keebler、Nisha Muktewar、Frank Nothaft、Nick Pentreath、Kostas Sakellis、Tom White、Marcelo Vanzin 和另一位 Juliet Hougland。谢谢你们所有人!我们欠你们一个大人情!你们的努力大大改进了本书的结构和质量。

我(桑迪)还要感谢 Jordan Pinkus 和 Richard Wang,你们帮助我完成了风险分析章节的原理部分。

感谢 Marie Beaugureau 和 O'Reilly 出版社在本书出版和发行过程中贡献的宝贵经验和大力支持!

第1章 大数据分析

作者:桑迪 • 里扎

(数据应用)就像香肠,最好别看见它们是怎么做出来的。

——Otto von Bismarck

  • 用数千个特征和数十亿个交易来构建信用卡欺诈检测模型
  • 向数百万用户智能地推荐数百万产品
  • 通过模拟包含数百万金融工具的投资组合来评估金融风险
  • 轻松地操作成千上万个人类基因的相关数据以发现致病基因

5~10 年前想要完成上述任务几乎是不可能的。我们说生活在大数据时代,意思是指我们拥有收集、存储、处理大量信息的工具,而这些信息的规模以前我们闻所未闻。这些能力的背后是许多开源软件组成的生态系统,它们能利用大量普通计算机处理大规模数据。Apache Hadoop 之类的分布式系统已经进入主流,并被广泛部署在几乎各个领域的组织里。

但就像锉刀和石头本身并不构成雕塑一样,有了工具和数据并不等于就可以做有用的事情。这时我们就需要数据科学了。雕刻是利用工具将原始石材变成普通人都能看懂的雕塑,数据科学则是利用工具将原始数据变成对不懂数据科学的普通人有价值的东西。

通常,“做有用的事情”指给数据加上模式并用 SQL 来回答问题,比如:“注册过程中许多用户进入到第三个页面,其中有多少用户年龄超过 25 岁?”如何架构一个数据仓库,并组织信息来回答此类问题,涉及的面很广,本书不对其细节过多赘述。

有时候“产生价值”需要多付出一些努力。SQL 可能仍扮演重要角色,但为了处理数据的特质或进行复杂分析,人们需要一个更灵活、更易用的,且在机器学习和统计方面功能更丰富的编程模式。本书将重点讨论此类型的分析。

长久以来,人们利用 R、PyData 和 Octave 等开源框架可以在小数据集上进行快速分析和建模。只需不到 10 行代码,就可以利用数据集的一部分数据构建出机器学习模型,再利用该模型预测其余数据的分类。如果多写几行代码,我们还能处理缺失数据,尝试多个模型并从中找出最佳模型,或者用一个模型的结果作为输入来拟合另一个模型。但如果数据集巨大,必须利用大量计算机来达到相同效果,我们该怎样做呢?

一个可能正确的方法是简单扩展这些框架,使之能运行在多台机器上,保留框架的编程模型,同时重写其内核,使之在分布式环境下能顺利运行。但是,分布式计算难度大,我们必须重新思考在单机系统中的许多基本假设,在分布式环境下是否依然成立。比如,由于集群环境下数据需要在多个节点间切分,网络传输速度比内存访问慢几个数量级,如果算法涉及宽数据依赖,情况就很糟糕。随着机器数量的增加,发生故障的概率也相应增大。这些实际情况要求编程模式适配底层系统:编程模式要防止不当选项,并简化高度并行代码的编写。

当然,除了像 PyData 和 R 这样在软件社区里表现优异的单机工具,数据分析还用到其他工具。在科学领域,比如常常涉及大规模数据的基因学,人们使用并行计算框架已经有几十年的历史了。今天,在这些领域处理数据的人大多数都熟悉 HPC(high-performance computing,高性能计算)集群计算环境。然而,PyData 和 R 的问题在于它们很难扩展。同样,HPC 的问题在于它的抽象层次较低,难于使用。比如要并行处理一个大 DNA 测序文件,人们需要手工将该文件拆成许多小文件,并为每个小文件向集群调度器提交一个作业。如果某些作业失败,用户需要检查失败并手工重新提交。如果操作涉及整个数据集,比如对整个数据集排序,庞大的数据集必须流入单个节点,否则科学家就要用 MPI 这样底层的分布式框架。这些底层框架使用难度大,用户必须精通 C 语言和分布式 / 网络系统。

为 HPC 环境编写的工具往往很难将内存数据模型和底层存储模型独立开来。比如很多工具只能从单个流读取 POSIX 文件系统数据,很难自然并行化,不能用于读取数据库等其他后台存储。最近,Hadoop 生态系统提供了抽象,让用户使用计算机集群就像使用单台计算机一样。该抽象自动拆分文件并在多台计算机上分布式存储,自动将工作拆分成若干粒度更小的任务并分布式执行,出错时自动恢复。Hadoop 生态系统将大数据集处理涉及的许多琐碎工作自动化,并且启动开销比 HPC 小得多。

1.1 数据科学面临的挑战

数据科学界有几个硬道理是不能违背的,Cloudera 数据科学团队的一项重要职责就是宣扬这些硬道理。一个系统要想在海量数据的复杂数据分析方面取得成功,必须明白这些硬道理,至少不能违背。

第一,成功的分析中,绝大部分工作是数据预处理。数据是混乱的,在让数据产生价值之前,必须对数据进行清洗、处理、融合、挖掘和许多其他操作。特别是大数据集,由于人们很难直接检查,为了知道需要哪些预处理步骤,甚至需要采用计算方法。一般情况下,即使在模型调优阶段,在整个数据处理管道的各个作业中,花在特征提取和选择上的时间比选择和实现算法的时间还要多。

比如,在构建网站欺诈交易检测模型时,数据科学家需要从许多可能的特征中进行选择。这些特征包括必填项、IP 地址信息、登录次数、用户浏览网站时的点击日志等。在将特征转换成适用于机器学习算法的向量时,每个特征可能都会有不同的问题。系统需要支持更灵活的转换,远远不止是将二维双精度数组转换成一个数学模型那么简单。

第二,迭代是数据科学的基础之一。建模和分析经常需要对一个数据集进行多次遍历。这其中一方面是由机器学习算法和统计过程本身造成的。常用的优化过程,比如随机梯度下降和最大似然估计,在收敛前都需要多次扫描输入数据。数据科学家自身的工作流程也涉及迭代。在初步调查和理解数据集时,一个查询的结果往往给下一个查询带来启示。在构建模型时,数据科学家往往很难在第一次就得到理想的结果。选择正确的特征,挑选合适的算法,运行恰当的显著性测试,找到合适的超参数,所有这些工作都需要反复试验。框架每次访问数据都要读磁盘,这样会增加时延,降低探索数据的速度,限制了数据科学家进行试验的次数。

第三,构建完表现卓越的模型不等于大功告成。数据科学的目标在于让数据对不懂数据科学的人有用。把模型以许多回归权值的形式存成文本文件,放在数据科学家的计算机里,这样做根本没有实现数据科学的目标。数据推荐引擎和实时欺诈检测系统是最常见的数据应用。这些应用中,模型作为生产服务的一部分,需要定期甚至是实时重建。

在这些场景中,有必要区别是试验环境下的分析还是生产环境下的分析。在试验环境下,数据科学家进行探索性分析。他们想理解工作数据集的本质。他们将数据图形化并用各种理论来测试。他们用各种特征做试验,用辅助数据源来增强数据。他们试验各种算法,希望从中找到一两个有效算法。在生产环境下,构建数据应用时,数据科学家进行操作式分析。他们把模型打包成服务,这些服务可以作为现实世界的决策依据。他们跟踪模型随时间的表现,哪怕是为了将模型准确率提高一个百分点,他们都会精心调整模型并且乐此不疲。他们关心服务 SLA 和在线时间。由于历史原因,探索性分析经常使用 R 之类的语言,但在构建生产应用时,数据处理过程则完全用 Java 或 C++ 重写。

当然,如果用于建模的原始代码也可用于生产应用,那就能节省每个人的时间。但像 R 之类的语言运行缓慢,很难将其与生产基础设施的技术平台进行集成,而 Java 和 C++ 之类的语言又很难用于探索性分析。它们缺乏交互式数据操作所需的 REPL(read-evaluate-print-loop,读取 - 计算 - 打印 - 循环)环境,即使是简单的转换,也需要写大量代码。人们迫切需要一个既能轻松建模又适合生产系统的框架。

1.2 认识Apache Spark

该介绍 Apache Spark 了。Spark 是一个开源框架,作为计算引擎,它把程序分发到集群中的许多机器,同时提供了一个优雅的编程模型。Spark 源自加州大学伯克利分校的 AMPLab,现在已被捐献给了 Apache 软件基金会。可以这么说,对于数据科学家而言,真正让分布式编程进入寻常百姓家的开源软件,Spark 是第一个。

了解 Spark 的最好办法莫过于了解相比于它的前辈,即 Apache Hadoop 的 MapReduce,Spark 有哪些进步。MapReduce 革新了海量数据的计算方式,为运行在成百上千台机器上的并行程序提供了简单的编程模型。MapReduce 引擎几乎可以做到线性扩展:随着数据量的增加,可以通过增加更多的计算机来保持作业时间不变。而且 MapReduce 是健壮的。故障虽然在单台机器上很少出现,但在数千个节点的集群上却总是出现。对于这种情况,MapReduce 也能妥善处理。它将工作拆分成多个小任务,能优雅地处理失败的任务,并且不影响任务所属作业的正确执行。

Spark 继承了 MapReduce 的线性扩展性和容错性,同时对它做了一些重量级扩展。首先,Spark 摒弃了 MapReduce 先 map 再 reduce 这样的严格方式,Spark 引擎可以执行更通用的有向无环图(directed acyclic graph,DAG)算子。这就意味着,在 MapReduce 中需要将中间结果写入分布式文件系统时,Spark 能将中间结果直接传到流水作业线的下一步。在这方面,它类似于 Dryad(https://www.microsoft.com/en-us/research/project/dryad/)。Dryad 也是从 MapReduce 衍生出来的,起源于微软研究院。其次,它也完善了这种能力,通过提供许多转换操作,用户可以更自然地表达计算逻辑。Dryad 更加面向开发人员,其流式 API 可以做到用几行代码表示复杂的流水作业。

再次,Spark 扩展了前辈们的内存计算能力。它的 Dataset 和 DataFrame 抽象使开发人员将流水处理线上的任何点物化在跨越集群节点的内存中。这样后续步骤如果需要相同数据集就不必重新计算或从磁盘加载。这个特性使 Spark 可以应用于以前分布式处理引擎无法胜任的应用场景中。Spark 非常适用于涉及大量迭代的算法,这些算法需要多次遍历相同的数据集。Spark 也适用于反应式(reactive)应用,这些应用需要扫描大量内存数据并快速响应用户的查询。

或许最重要的是,Spark 契合了前面提到的数据科学领域的硬道理。它认识到构建数据应用的最大瓶颈不是 CPU、磁盘或者网络,而是分析人员的生产率。通过将预处理到模型评价的整个流水线整合在一个编程环境中,Spark 大大加速了开发过程。这一点尤为值得称赞。Spark 编程模型富有表达力,在 REPL 下包装了一组分析库,省去了多次往返 IDE 的开销。而这些开销对诸如 MapReduce 等框架来说是无法避免的。Spark 还避免了采样和从 Hadoop 分布式文件系统(the Hadoop distributed file system,HDFS) 来回倒腾数据所带来的问题,这些问题是 R 之类的框架经常遇到的。分析人员在数据上做实验的速度越快,他们从数据中挖掘出价值的可能性就越大。

在数据处理和 ETL 方面,Spark 的目标是成为大数据界的 Python 而不是大数据界的 MATLAB。作为一个通用的计算引擎,它的核心 API 为数据转换提供了强大的基础,它独立于统计学、机器学习或矩阵代数的任何功能。它的 Scala 和 Python API 让我们可以用表达力极强的通用编程语言编写程序,还可以访问已有的库。

Spark 的内存缓存使它适用于微观和宏观两个层面的迭代计算。机器学习算法需要多次遍历训练集,可以将训练集缓存在内存里。在对数据集进行探索和初步了解时,数据科学家可以在运行查询的时候将数据集放在内存中,也很容易将转换后的版本缓存起来,这样就节省了访问磁盘的开销。

最后,Spark 在探索型分析系统和操作型分析系统之间搭起一座桥梁。我们经常说,数据科学家比统计学家更懂软件工程,比软件工程师更懂统计学。基本上讲,Spark 比探索型系统更像操作型系统,比操作型系统中常见的技术更善于数据探索。Spark 从根本上是为性能和可靠性而生的。由于构建于 JVM 之上,它可以利用 Java 技术栈里的许多操作和调试工具。

Spark 还紧密集成 Hadoop 生态系统里的许多工具。它能读写 MapReduce 支持的所有数据格式,可以与 Hadoop 上的常用数据格式,如 Apache Avro 和 Apache Parquet(当然也包括古老的 CSV),进行交互。它能读写 NoSQL 数据库,比如 Apache HBase 和 Apache Cassandra。它的流式处理组件 Spark Streaming 能连续从 Apache Flume 和 Apache Kafka 之类的系统读取数据。它的 SQL 库 SparkSQL 能和 Apache Hive Metastore 交互,而且通过 Hive on Spark,Spark 还能替代 MapReduce 作为 Hive 的底层执行引擎。它可以运行在 Hadoop 集群调度和资源管理器 YARN 之上,这样 Spark 可以和 MapReduce 及 Apache Impala 等其他处理引擎动态共享集群资源和管理策略。

1.3 关于本书

本书接下来的部分不会讨论 Spark 的优缺点。还有其他一些话题本书也不会涉及。本书会介绍 Spark 的流式编程模型和 Scala 基础知识,但它不是 Spark 参考书或参考大全,不会讲 Spark 技术细节。它也不是机器学习、统计学、线性代数的参考书,但在讲到这些知识的时候,许多章节会提供一些背景知识。

另一方面,本书将帮助读者建立用 Spark 在大规模数据集上进行复杂分析的感觉。我们会讲述整个处理过程:不但涉及模型的构建和评价,也会讲述数据清洗、数据预处理和数据探索,并会花费笔墨描述怎样将结果变成生产应用。我们认为最好的教学方法是运用实例,所以在快速介绍完 Spark 及其生态系统之后,本书其余各章分别讨论了在不同领域使用 Spark 进行数据分析的实例,每个实例都自成一体。

如果可能的话,我们要做的不只是提供解决方案。我们会描述数据科学的整个工作流程,包括它所有的迭代、无解以及需要重新开始的情况。本书将有助于读者熟悉 Scala、Spark、机器学习和数据分析。但这都是为了一个更大的目标服务,我们希望本书首先教会读者如何完成本章开头部分提到的任务。每一章虽然只有薄薄的 20 来页,但我们会力求把怎样构建一个此类数据应用讲清楚、讲透彻。

1.4 第2版说明

2015 年和 2016 年 Spark 变化很大,2016 年 7 月 Spark 发布了 2.0 版本。其中改变最大的是 Spark 的核心 API。在 Spark 2.0 以前的版本中,Spark 的 API 主要围绕一个可以跨节点分布的、延迟实例化对象集合的弹性分布式数据集(Resilient Distributed Dataset,RDD)而构建。

虽然 RDD 使用了一套强大而富有表达力的 API,但是仍然存在两个主要的问题。第一,RDD 难以高效且稳定地执行任务。由于依赖 Java 和 Python 对象,RDD 对内存的使用效率较低,而且会导致 Spark 程序受长时间垃圾回收的影响。它们还将执行计划(execution plan)与 API 捆绑到了一起,给用户优化应用程序造成了沉重的负担。例如,传统 RDBMS(关系数据库管理系统)可以根据关联表的大小来选择最优的关联策略(join strategy),而 Spark 需要用户自己来做这个选择。第二,Spark 的 API 忽视了一个事实——数据往往能用一个结构化的关系形式来表示;当出现这种情况的时候,API 应该提供一些原语,使数据更加易于操作,比如允许用户使用列的名字来访问数据,而不是通过元组中的序数位置。

Spark 2.0 用 Dataset 和 DataFrame 替换掉 RDD 来解决上述问题。Dataset 与 RDD 十分相似,不同之处在于 Dataset 可以将它们所代表的对象映射到编码器(encoder),从而实现了一种更为高效的内存表示方法。这就意味着 Spark 程序可以执行得更快、使用更少内存,而且执行时间更好预测。Spark 还在数据集和执行计划之间加入了一个优化器,这意味着 Spark 能对如何执行做出更加智能的决策。DataFrame 是 Dataset 的子类,专门用于存储关系型数据(也就是用行和固定列表示的数据)。为了理解列的概念,Spark 提供了一套更干净的、富有表达力的 API,同时也加入了很多性能优化。举个例子,如果 Spark 知道了仅其中一部分列会被用到,它就能避免将用不到的列载入内存中。还有许多转换操作之前需要使用用户定义函数(user-defined function,UDF)来表示,现在可以在 API 中直接调用了。这对于 Python 用户来说十分有用,因为 Spark 在内部执行这些转换操作比 Python 中定义的函数要快得多。DataFrame 还可以与 Spark SQL 互相操作,这意味着用户可以写一个 SQL 查询来获取一个 DataFrame,然后选择一种 Spark 支持的语言对这个 DataFrame 进行编程操作。尽管新 API 与旧 API 看起来十分相似,但是很多细节发生了改变,因此几乎所有的 Spark 程序都要更新。

除了核心 API 的变化以外,Spark 2.0 还见证了机器学习 API 和统计分析 API 的巨大变化。在之前的版本中,每个机器学习算法都有一套自己的 API。如果用户想要准备算法需要的输入数据,或者将一个算法的输出提供给另外一个算法,都需要写一套它们自己的自定义编制代码。Spark 2.0 包含了 Spark ML API,它引入了一个框架,可以将多种机器学习算法和特征转换步骤管道化。这个 API 受 Python 的流行框架 Scikit-Learn API 启发,以评估器(estimator)和转换器(transformer)为中心,转换器从数据中学习参数,然后用这些参数来转换数据。Spark ML API 与 DataFrame API 高度集成,使得在关系型数据上训练机器学习模型变得更容易。例如,用户可以通过名字访问特征,而不用数组下标。

总体来说,Spark 的这些变化导致本书第 1 版中的很多内容都过时了。因此,第 2 版更新了所有的章节,并尽可能地使用最新的 API。此外,我们还删除了一些无关的章节。例如,第 1 版附录介绍了 API 的细节,第 2 版中将其删除了,一定程度上是因为现在 Spark 可以自动处理,无须用户干预。随着 Spark 进入了一个成熟而稳定的新时代,我们希望通过第 2 版的这些更新,本书在今后几年内会保持对 Spark 数据分析的参考价值。

第2章 用 Scala 和 Spark 进行数据分析(上)
第2章 用 Scala 和 Spark 进行数据分析(下)
第3章 音乐推荐和 Audioscrobbler 数据集
第4章 用决策树算法预测森林植被
第5章 基于 K 均值聚类的网络流量异常检测
第6章 基于潜在语义分析算法分析维基百科
第7章 用 GraphX 分析伴生网络
第8章 纽约出租车轨迹的空间和时间数据分析
第9章 基于蒙特卡罗模拟的金融风险评估
第10章 基因数据分析和 BDG 项目
第11章 基于 PySpark 和 Thunder 的神经图像数据分析
封面介绍

阅读全文: http://gitbook.cn/gitchat/geekbook/5b95f204780fdb5e97d39763

2017-12-07 10:01:58 MrGeroge 阅读数 3166
  • Spark快速大数据处理

    课程的主要内容包括: 1.ZooKeeper-分布式过程协同组件 2.Hadoop3-大数据基础组件 3.Tez-Yarn底层计算引擎 4.Hive3-大数据仓库 5.Spark2实时大数据处理 6.Oozie5-大数据流程引擎 课程特点: 1.最新API: Hadoop3/Spark2/Hive3/Oozie5 2.手工搭建集群环境:编译+搭建 3.配套资源:分阶段镜像+课件+安装资源,其中安装资源包括案例源码、脚本等 4.案例为主:分模块案例+天池数据分析竞赛 5.故障教学 6.完整实战项目:天池数据分析

    12350 人正在学习 去看看 余海峰

第一章 大数据分析

1.数据科学面临的挑战

1)数据分析绝大部分工作是数据预处理包括清洗,处理,融合,挖掘以及其他操作,即使模型调优阶段,特征提取和选择上花费的时间比选择和实现算法时间更多

2)迭代与数据科学紧密相关,比如模型优化时采用的随机梯度下降和最大似然估计,构建模型时需要选择正确特征,挑选合适算法,运行显著性测试,找到合适超参数

3)构建完表现卓越的模型不等于大功告成,模型需要定期甚至实时重建

第二章 用ScalaSpark进行数据分析

数据清洗是数据分析的第一步,数据分析工具语言Scala能完成所有事情

数据清洗一般包括身份解析,记录去重,合并-清除,列表清洗,统称为记录关联

 

记录关联问题描述:

需要从一个或者多个源系统的记录中,根据记录的属性判断记录是否是相同实体

由于RDD都是临时存在的,因此如果后面仍然需要用到此RDD,则需要在当前就缓存此RDD,这样再次使用此RDD时可直接从内存中获取,节约计算开销

 

2.1 聚合

mdsRDD[MatchData]

val grouped=mds.groupBy(md=>md.matched)//根据matched来聚合分为true,false两类

grouped.mapValues(x=>x.size) //grouped中每个元素Key=true or falseValues则为多行记录

 

2.2 概要统计

Parsed.map(md=>md.score(0)).filter(!isNaN(_)).stats() //可以获得score(0)列的统计信息包括总数,平均值,stdev,最大值,最小值

 

2.3 直方图

parsed.map(md=>md.matched).countByValue().toSeq.sortBy(_._1)

 

2.4zip

val nas1=Array(1.0,Double.NaN).map(d=>NAStatCounter(d)) //nas1=Array(NAStatCounter(1.0),NAStatCounter(NaN))

val nas2=Array(Double.NaN,2.0).map(d=>NAStatCounter(d)) //同理nas2

val nas3=nas1.zip(nas2)//Array((NAStatCounter(1.0),NAStatCounter(NaN)),(NAStatCounter(NaN),NAStatCounter(2.0)))

nas3.map(case(a,b)=>a.merge(b))//相当于Array((NAStatCounter(1.0).merge(NAStatCounter(NaN)),NAStatCounter(NaN).merge(NAStatCounter(2.0)))

 

第三章 音乐推荐和Audioscrobbler数据集

隐式反馈数据:Audioscrobbler数据集覆盖了大量用户和艺术家,同时包含了更多总体信息,而单条记录信息较少,这类数据称为隐式反馈数据

user_artist_data.txt 用户ID-艺术家ID-播放次数

artist_data.txt 艺术家ID-艺术家名

artist-alias.txt 将拼写错误的艺术家ID或者ID变体对应到该艺术家的规范ID 错误ID-规范ID

 

3.1 交替最小二乘法推荐

根据两个用户播放过许多相同的歌曲来判断他们可能都喜欢某首歌,称为协同过滤

利用user_artist_data.txt可构建一个稀疏矩阵,有m个用户,和n个艺术家,则此稀疏矩阵为m*n(i,j)的值表示第i个用户播放第j个艺术家的作品次数,此稀疏矩阵A=X*YT

 

用户-特征矩阵和特征-艺术家矩阵的乘积结果约等于稠密用户-艺术家相互关系矩阵的完整估计,求解X,Y可采用交替最小二乘法

AiY(YTY)-1=XI(X的每一行可分别计算,因此并行化),目标是最小化|AiY(YTY)-1-XI|,或者最小化两个矩阵的平方误差,实际会借助QR分解

 

ALS算法特征是稀疏的输入数据、可以用简单的线性代数运算求最优解、数据本身可并行化这三点导致大数据计算非常快

 

Spark MllibALS算法要求用户和产品的ID必须为整数型,而且是32位非负整数

 

1)数据清洗,过滤掉不合规范的数据

2)构建训练集和模型

mkString()常用作把集合元素表示成某种形式分隔的字符串

userFraction 用户特征矩阵

productFraction 商品特征矩阵

3)核查推荐结果 

看实际用户点击过得艺术家和推荐的艺术家是否一致

4)评价推荐质量

AUCBinaryClassificationMetrics:随机选择的好推荐高于坏推荐的概率,作为普遍和总和的测量整体模型质量的手段

AUC的输入为检验集CV(每个用户对应的“正面的”或者“好的”艺术家)和预测函数(每个用户-艺术家对转换成预测Rating

MAPRankingMetrics):准确率,召回率,平均准确度,更强调最前面的推荐质量

选择模型并评估模型准确度是通用做法,数据通常分为训练集(训练模型)、检验集(评估模型)、测试集

5)选择超参数

ALS.trainImplicit()参数包括:

rank=10模型的潜在因素个数,即“用户-特征”和“产品-特征”矩阵的列数(rank影响不明显)

Iterations=5 迭代次数

lambda=0.01标准的过拟合参数,值越大越不容易产生过拟合,但值太大会降低分解的准确性(lambda越大模型效果越好)

alpha=1.0 被观察到的“用户-产品”交互相对没被观察到的交互的权重(模型知道用户听过什么时比不知道用户听过什么时要好)

可以将推荐引擎得到的结果保存在HBase便于快速查询,且对于推荐模型可以保存在文件中 

 

第四章 用决策树算法预测森林植被

趋均数回归:父代豌豆大,子代豌豆也大,但比父代小;父代豌豆小,子代豌豆也小,但比父代大,因此斜率为正但小于1

何谓回归:根据某个值预测另外一个值的思想,回归通常用作预测,回归通常一侧数值型数量,比如大小,收入和温度;分类则只预测标号或者类别

监督学习:需要告诉其类别,然后训练出预测规则,分类(支持向量机,逻辑回归,朴素贝叶斯,神经网络,深度学习),预测

非监督学习:比如聚类

 

4.1向量和特征

维度、预测指标或者变量都称为特征,特征分为类别型特征和数值型特征,可将目标作为附加特征

比如当天天气的特征向量为12.5,15.5,0.10,晴朗,0,17,2,其中17.2作为目标是当天天气的附加特征

回归问题的目标是数值型特征,分类问题的目标是类别型特征

 

4.2 决策树和决策森林

基于决策树的优点:

1)容易并行化,对数据中的离散点具有鲁棒性

2)算法可以接受不同类型和量纲的数据,对数据类型和尺度不相同的情况不需要做预处理或者规范化

3)理解和推理起来相对直观

 

决策树类似于多重if语句判断

 

4.3 Covtype数据集

由于Vector+Label=LabeledPointVector为特征值,Label为目标,由于Spark Mllib库中Vector只能是Double类型,因此若数据中存在类别特征需要编码转换成数值特征

1)采用one-hot编码可以将N个类别特征->N个数值特征,比如多云,有雨,晴朗->(1,0,0),(0,1,0),(0,0,1)

2)采用直接映射比如规定多云=1.0,有雨=2.0,晴朗=3.0

 

4.4 构建决策树模型

val model=DecisionTree.trainClassifier(trainData,7,Map[Int,Int](),”gini”,4,100) 

除了第一个参数外,其余均为超参数

第二个参数为数据集中目标的取值个数7个,即目标可能取值为7

第三个参数为Map保存类别型特征的信息

第四个参数gini ,补偿函数

第五个参数4为最大深度

第六个参数为最大桶数100

MulticlassMetrics计算分类器预测质量的标准指标

BinaryclassficationMetrics提供类似的评价指标,但只适用于类别型目标只有两个可能取值

所谓的混淆矩阵的每个行对应实际的正确类别值;每一列对应预测值,第i行第j列元素代表正确类别为i的样本被预测为类别为j的次数,对角线上的元素表示预测正确的次数,剩余的为预测错误的次数

准确度:预测正确的样本数占整个样本的比例

召回率:被分类器标记为“正”而且确实为“正”的样本与所有本来为“正”的样本比例

每种类别在训练集所占比例*每种类别在检验集所占比例=每种类别的总体准确度,将每种类别的总体准确度累加所得即为整体的准确度

 

4.5决策树的超参数

包括最大深度,最大桶数,不纯性度量

1)最大深度:对决策树的最大层数限制,避免过拟合

 

决策树算法为每层生成可能的决策规则,对于数值型特征,决策采用特征>=值的形式;对于类别型特征,决策采用在(值1,值2...)中的形式;决策规则的集合称为“桶”,桶的数目越多,需要处理的时间越多但找到决策规则可能更优;好规则可把训练集数据的目标值分为相对是同类或者纯的子集,最好的规则意味着最小化规则对应的两个子集的不纯性;不纯性的度量方式:Gini不纯度或者熵

Gini不纯度直接与随机猜测分类器的准确度相关(1-每个类别的比例与自身的乘积之和)

熵不纯度来源于信息论中熵的计算,Spark的实现默认采用Gini不纯度

 

4.6决策树调优

最大桶数越多越好,会减慢模型构造过程且增加内存的使用量

最大深度能提高准确度,但有个拐点,超过它之后就没有用

在所有情况下都应该试试两种不纯性度量,有时候gini表现好点,有时候熵表现好点

 

检验集评估适合训练集的参数,测试集评估适合检验集的超参数,测试集保证了对最终选定超参数即模型准确度的无偏估计

 

最后一步需要利用测试集评估检验集选定的超参数和(训练集+检验集)下构造的模型,若得到的准确率与CV集所得的准确率差不多,则估计可靠

 

整体过程大致为:

1)利用trainData训练得到决策树模型

2)利用cvData找到最优的超参数组合

3)利用trainData&cvData以及最优的超参数组合训练出新的决策树模型

4)利用testData评估该模型的准确度,并与以trainData作为训练集,cvData作为测试集时的准确度比较,若相差不大,则估计可靠

 

4.7重谈类别型特征

直接使用类别型特征

Map(),不把任何特征当做类别型

Map()中的key指输入向量Vector的下标,value指类别型特征的不同取值个数

通过吧类别型特征真正当做类别型,分类器的准确度提高近3%

 

4.8 随机决策森林

随机森林的关键在于所及的构建多颗决策树,多颗决策树的平均预测作为最终的结果

val forest=RandomForest.trainClassifier(trainData,7,Map(10->4,11->40),20,”auto”,”entropy”,30,300)

20为随机森林由20个独立的决策树组成

auto特征决策树每层的评估特征选择策略,决策规则只考虑全部特征的一个子集,往往不会产生过拟合现象

 

第五章 基于K均值聚类的网络流量异常检测

K-Means算法是最经典的无监督学习算法吗,K值即为该聚类模型的超参数

点与点相似代表其距离小,这里的距离只欧式距离,簇群的中心为质心,它是簇群中所有点的算术平均值,数据点实际上等同于特征向量

 

5.1数据准备

http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html 网络流量异常检测,数据集大小为708MB,包括490万连接

每个连接占一行,共38个特征,包括发送字节数,登录次数,TCP错误数

由数据分析可知smurfneptune类型的连接攻击较多

数据清洗:删除类别型列和最后的标识列

5.2K值选择

随着K值的增加,平均质心距离先减少后增加,但只能取得局部最优情况,Spark Mllib采用K均值||

setRuns()设置给定K值时运行次数,每次随机选择初始质心,然后从多次聚类结果中选择最优的情况

setEpsilon()增加迭代时间可以优化聚类结果,控制聚类过程中簇质心进行有效移动的最小值

5.3特征的规范化

 

第六章 基于潜在语义分析算法分析维基百科

潜在语义分析:是一种自然语言处理和信息检索技术,目的是更好地理解文档语料库以及文档中词项的关系,它将语料库提炼成一组相关概念,每个概念捕捉数据中一个不同主题,且通常与语料库讨论的主题相符,每个概念分为三个属性:1)语料库中文档的相关度2)语料库中词项的相关度3)概念对描述主题的重要性评分;它可以计算词项与词项,文档与文档,词项与文档之间的相似度评分,这些相似度度量方法适合根据词项查询相关文档,按主题将文档分组和找到相关词项等任务

 

LSA在降维过程中采用奇异值分解的线性代数技术,首先根据词项在文档中出现的次数构造一个词项-文档矩阵,每个文档对应一列,每个词项对应一行,矩阵中的每个元素代表某个词项在对应文档中的重要性(权重),接着SVD可将矩阵分解为三个子矩阵,其中一个矩阵代表文档出现的概念,两一个代表词项对应的概念,还有一个代表每个概念的重要度

 

6.1 词项-文档矩阵

每一行代表词项,每一列代表文档,每个值代表词项在文档中的权重,其中权重的计算规则为TF-IDF        

需要对原始的维基百科到处文件转换成词项-文档矩阵需要进行许多预处理:

1)输入XML文件,每个文档由<page>标签分隔

2)将纯文本拆成词条(token

3)将词条的不同曲折词缀还原成词根,称为词形归并

4)词条用于计算词项频率和文档频率

6.2 获取数据 

1)需要利用XmlInputFormat读取HDFS上的每个page的内容                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

2)利用wikipedia提供的API将每个page的内容->(page.getTitle,page.getContent)

 

6.3词形合并

1)像theis之类的常用词不会为模型提供有用信息,因此要去掉这些停用词

2)相同意思的词项可能存在不同词形,比如monkeymonkeys不能算作不同词项,再比如nationalizenationalization,将这些不同曲折词缀合并成单个词项的过程称为词干还原或者词形归并

 

6.5 计算TF-IDF

1)得到每个文档中每个词项出现的频次

2)得到每个文档中总的频次

3)得到总的文档数

4)docTermFreqs.flatMap(_.keySet).map((_,1)).reduceByKey(_+_) 得到每个item在多少个文档出现过

5)由于spark Mllib只能处理数值型特征,因此需要将item=>ididfs.keys.zipWithIndex.toMap

 

6.6 奇异值分解

M=USVT

Um*k维矩阵,U中的列是文档空间的正交基,m个文档和k个概念

Sk*k对角矩阵,每个对角代表概念的强度

Vn*k型矩阵,V中的列是词项空间的正交基,k个概念和n个词项

 

m为文档个数,n为词项个数,k为要保留的概念个数

计算奇异值分解的过程:

1)val mat=new RowMatrix(termDocMatrix)

2)val k=1000

3)val svd=mat.computeSVD(k,computeU=true)

 

6.7找出重要概念

Val v=svd.V //V矩阵,词项对概念的重要度

val topTerms=new ArrayBuffer[Seq(String,Double)]()

val arr=v.toAttay //将矩阵转换成数组

for(i<-0 until numConcepts){

val offs=i*v.numRows

val termWeights=arr.slice(offs,offs+v.numRows).zipWithIndex //求每个term的权重

val sorted=termWeights.sortBy((-)_._1)

topTerms+=sorted.take(numTerms).map{

case(score,id) =>(termIds(id,score))

}

topTerms

 

得到每个概念(主题)相关的词项和文档

 

6.8 基于低维近似的查询和评分

余弦相关度度量可以明确的标识两个词项的相关度得分,余弦相似度可以通过点乘除以向量的长度得到,广泛使用余弦相关度度量作为文档和词项相似度的指标

 

6.9词项-词项相关度

LSA算法背后的思想是低阶矩阵对数据更有用的表示

1)合并相关词项处理同义词

2)对词项的不同含义赋予低的权重处理多义词

3)过滤噪声

 

如何得到词项-词项之间的相似度

1)V点乘s=>Vs,然后对Vs进行归一化

2)根据normalizedVS和查询词项termId得到查询词项所在行向量rowVec

3)查询词项行向量rowVec*normalizedVS->termScores //得到每次词项与查询词项的相似度

4)按照相似度从大到小排序->得到与查询词项最相关的N个词项

 

6.10 文档-文档相关度

1)创建US

Val US=mutiplyByDiagonalMatrix(svd.U,svd.s) //创建US

2)归一化US

Val normalizedUS=rowsNormalized(US)

3)根据查询文档IDdocId与归一化矩阵normalizedUS得到docRowArr

val docRowArr=row(normalizedUS,docId) //US中查找给定docId对应的行

4)将文档行->文档行向量

Val docRowVec=Matrices.dense(docRowArr.length,1,docRowArr)

5)文档行向量与归一化US相乘

Val docScores=normalizedUS.multiply(docRowVec) //每个文档与查询文档的相关度

6)找出相关度最高的前N个文档

Val allDocWeights=docScores.rows.map(_.toArray(0)).zipWithUniqueId().filter(!_._1.isNaN)

 

6.11 词项-文档相关度

 1)在V中根据termId找到查询词对应的行<以及行向量

Val rowArr=row(V,termId).toArray //找到termId所对应的行向量

Val rowVec=Matrics.dense(termRowArr.length,1,termRowArr)

2)找到查询词相关的文档

Val docScores=US.multiply(termRowVec)

3)找到查询词最相关的前N个文档

Val allDocWeights=docScores.rows.map(_.toArray(0)).zipWithUniqueId().top(10)

 

6.12 多项词查询

1)构造查询词的稀疏向量

new BSparseVector[Double](indices,values,idTerms.size) //indices查询词的IDvalues为查询词对应的逆文档频率

2)得到查询词对应的行向量

val termRowArr=(breezeV.t*query).toArray

val termRowVec=Matrices.dense(termRowArr.length,1,termRowArr) 

3)US点乘行向量得到查询词对应的文档得分

Val docScores=US.multiply(termRowVec) 

4)取得查询词最相关的N个文档

docScores.rows.map(_.toArray(0)).zipWithUniqueId().top(10)

 

第七章 用GraphX分析伴生网络

Spark之上运行的GraphX并行图计算框架,支持PregelGraphGraphLab可分析用户-商品购买关系图,社交网络等

 

7.1MEDLINE文献引用索引的网络分析

基本思路:

1)研究数据集中的主要主题和它们的伴生关系

2)找到数据集中的连通组件

3)图的度分布,描述了主题的相关度变化并有助于找到那些与其他主题相关联最多的主题

4)计算图的统计量:聚类系数和平均路径长度

 

7.2获取数据

样本问价那种的每条记录是MedlineCitation类型的记录,该记录包括杂志名称、发行期号、发行日期、作者姓名、摘要、MeSH关键字集合

 

7.3Scala XML工具解析XML文档

通过scala.xml工具能快速方便的解析XML文件

 

7.4分析MeSH主要主题和伴生关系

高频topic占少数,低频topic占多数,因此呈现出长尾

 

7.5GraphX来建立一个伴生网络

把伴生网络真正当做网络分析,主题作为图的顶点,连接两个主题的引用记录看作图的边

VertexRDD[VD]RDD[(VertexId,VD)]的特殊实现,VertexId为顶点标识,VD为顶点属性;EdgeRDD[ED]RDD[Edge[ED]]的特殊实现,每个Edge包含两个VertexId和一个ED边属性

 

1)由于每个主题都是字符串型,因此需要将其转换成64位的Long

2)利用Hashing哈希算法将每个topic->唯一的vertexId,即生成顶点

3)利用伴生频率计数生成边,保证左边的vertexId(src)比右边的vertexId(dst)

4)准备好顶点和边后便可以创建GraphX实例,GraphX可以自动完成顶点的去重,但不会进行边去重,这样Graph可以为我们生成多图

 

7.6理解网络结构

判断该图是否连通图,若不是连通图,则可以进一步划分成子图研究其特性,GraphX内置了连通部件
val connectedComponentGraph[VertexId,Int]=topicGraph.connectedComponents()//VertexId是每个顶点所属连通组件的唯一标识符

 

7.7度分布

注意点

1)degrees RDD中条目个数比概念图中的顶点数少,这是由于部分顶点没有连接边,只有一个主题词

2)度的均值很小,意味着大部分顶点只连接少数的其他节点,当然也存在度很高的顶点

 

7.8过滤噪声边

 

2018-12-31 14:44:06 xiaohuanglv 阅读数 414
  • Spark快速大数据处理

    课程的主要内容包括: 1.ZooKeeper-分布式过程协同组件 2.Hadoop3-大数据基础组件 3.Tez-Yarn底层计算引擎 4.Hive3-大数据仓库 5.Spark2实时大数据处理 6.Oozie5-大数据流程引擎 课程特点: 1.最新API: Hadoop3/Spark2/Hive3/Oozie5 2.手工搭建集群环境:编译+搭建 3.配套资源:分阶段镜像+课件+安装资源,其中安装资源包括案例源码、脚本等 4.案例为主:分模块案例+天池数据分析竞赛 5.故障教学 6.完整实战项目:天池数据分析

    12350 人正在学习 去看看 余海峰

Spark快速大数据分析 (图灵程序设计丛书)-[美] 卡劳(Holden Karau)[美] 肯维尼斯科(Andy Konwinski)[美] 温德尔(Patrick Wendell)[加] 扎哈里亚(Matei Zaharia)

            在线阅读                   百度网盘下载(o2gk)


image.png

书名:Spark快速大数据分析 (图灵程序设计丛书)

作者:[美] 卡劳(Holden Karau)[美] 肯维尼斯科(Andy Konwinski)[美] 温德尔(Patrick Wendell)[加] 扎哈里亚(Matei Zaharia)

格式:EPUB, HTMLZ, PDF

书号:9787115403094

路径:点击打开

出版:人民邮电出版社

排序作者:Zaharia), 卡劳(Holden Karau) 肯维尼斯科(Andy Konwinski) 温德尔(Patrick Wendell) 扎哈里亚(Matei

排序书名:Spark快速大数据分析 (图灵程序设计丛书)

日期:08 12月 2018

uuid:ee27d1cf-41c4-4346-b9e2-b6212df5a90a

id:494

出版日期:9月 2015

修改日期:08 12月 2018

大小:4.38MB

语言:中文


作者简介


Holden Karau 是 Databricks 的软件开发工程师,开源工作积极参与者。她也是早前另一本 Spark 书的作者。在加入 Databricks 之前,她曾在 Google、Foursquare、Amazon 参与过搜 索和分类问题方面的工作。Holden 毕业于滑铁卢大学,获得计算机科学专业的数学学士学 位。除了软件外,她还喜爱玩火、焊接和呼啦圈。


Andy Konwinski 是 Databricks 的创始人之一。在此之前,他是加州大学伯克利分校 AMPLab 实验室的博士生,接着成为了博士后,研究方向是大规模分布式计算和集群调度。他共同 创建了 Apache Mesos 项目,并且是该项目的代码提交者之一。他还与 Google 的系统工程师 以及研究员一起致力于 Omega——Google 的下一代集群调度系统的设计。最近,他开展并 领导了 AMP Camp 大数据训练营以及 Spark 峰会,并为 Spark 项目作出了贡献。


Patrick Wendell 也是 Databricks 的联合创始人之一,同时他也是一位 Spark 的代码提交者及 PMC 成员。在 Spark 项目中,Patrick 是几个 Spark 发布版本的发行经理,其中包括 Spark 1.0。Patrick 也维护着 Spark 核心引擎的几个子系统。在帮助创办 Databricks 之前,Patrick 在加州大学伯克利分校获得了计算机科学的硕士学位,研究方向是大规模分析类工作负载 的低延迟调度。他还拥有普林斯顿大学的计算机学士学位。


Matei Zaharia 是 Apache Spark 的创造者,也是 Databricks 的 CTO。他拥有加州大学伯克利 分校的博士学位,并从那里以研究型项目的形式启动了 Spark。他现在也是 Apache 基金会 的一名副总裁。除了 Spark 以外,他也对集群计算领域的其他一些项目有所研究,并作出 了开源代码共献,其中包括 Apache Hadoop(他是代码提交者之一)和 Apache Mesos(也 是他在伯克利时参与启动的项目)。

封面介绍


本书封面上的动物是斑点猫鲨(Scyliorhinus canicula),是东北大西洋和地中海中最常见的 软骨鱼类之一。这是一种体型小而修长的鲨鱼,头部扁钝,眼睛细长,吻部短圆。背部表 面呈灰棕色,混杂着细小的或明或暗的斑点图案。皮肤质地粗糙,和砂纸的粗糙度相似。


这种小鲨鱼以海生无脊椎动物为食,它的食物包括软体动物、甲壳类、头足类,以及多毛 类蠕虫。它也会吃一些小的硬骨鱼,偶尔吃体型稍大的鱼。它是一个卵生物种,会把蛋产 在靠近海岸的浅水中,由带有长卷须的角质壳保护。


斑点猫鲨在渔场中具有一定的商业价值,但它更适合用来在公共水族馆中展示。尽管它的 商业价值已被发现,且大量个体被保留下来供人食用,但这一物种仍然经常被抛弃,而且 研究表明抛弃后的存活率较高。 O'Reilly 丛书封面上的许多动物都濒临灭绝,而它们对这个世界来说都很重要。要了解更 多你力所能及的事,请访问animals.oreilly.com。


封面图片来自 Wood 所著 Animate Creation。

致谢

感谢 Joseph Bradley、Dave Bridgeland、Chaz Chandler、Mick Davies、Sam DeHority、Vida Ha、Andrew Gal、Michael Gregson、Jan Joeppen、Stephan Jou、Jeff Martinez、Josh Mahonin、Andrew Or、Mike Patterson、Josh Rosen、Bruce Szalwinski、Xiangrui Meng、Reza Zadeh 等审阅者,他们为本书的写作提出了宝贵的意见。


特别感谢 David Andrzejewski、David Buttler、Juliet Hougland、Marek Kolodziej、Taka Shinagawa、Deborah Siegel、Normen Müller 博士、Ali Ghodsi、Sameer Farooqui 等人,他们为大部分章节提供了详细的反馈,并且帮助指出了许多至关重要的改进之处。


我们还要感谢参与编辑和编写部分章节的主题专家。第 10 章是在我们与 Tathagata Das 的紧密合作下共同完成的。Tathagata 给了我们巨大的帮助,他的工作包括且不限于阐明示例、回答疑问、改进排版以及相关技术的贡献。Michael Armbrust 帮助我们审校了 Spark SQL 相关章节。在第 11 章中,Joseph Bradley 为 MLlib 模块提供了介绍性示例。Reza Zadeh 为关于降维的部分提供了图文描述和代码示例。Xiangrui Meng、Joseph Bradley 和 Reza Zadeh 也为 MLlib 章节提供了编审和关于技术细节的反馈。

读者对象

本书的目标读者是数据科学家和工程师。我们选择这两个群体的原因,在于他们能够利用 Spark 去解决一些可能会遇到但是没有办法解决的问题。Spark 提供了功能丰富的数据操作库(例如 MLlib),可以帮助数据科学家利用他们自己的统计学背景知识,研究数据集大小超过单机所能处理极限的数据问题。与此同时,工程师们则可以从本书中学习和利用 Spark 编写通用的分布式程序并运维这些应用。工程师和数据科学家都不仅能从本书中学到各自需要的具体技能,而且还能够在各自领域中利用 Spark 解决大型分布式问题。


数据科学家关注如何从数据中发现关联以及建立模型。数据科学家通常有着统计学或者数学背景,他们中的大多数也熟悉 Python 语言、R 语言、SQL 等传统数据分析工具。在本书中,我们不仅会讲到 Spark 中一些机器学习和高级数据分析的程序库,也会把一些 Python 或者 SQL 的应用作为 Spark 使用示例进行展示。如果你是一位数据科学家,我们希望你读完本书之后,能够在获得更快速度和更大数据规模支持的同时,使用早已熟悉的方式来解决问题。


本书的第二类目标读者是软件工程师。对于工程师,不管你擅长的是 Java 还是 Python,抑或是别的编程语言,我们希望这本书能够教会你如何搭建一个 Spark 集群,如何使用 Spark shell,以及如何编写 Spark 应用程序来解决需要并行处理的问题。如果你熟悉 Hadoop,你就已经在如何与 HDFS 进行交互以及如何管理集群的领域中领先了一小步。即使你没有 Hadoop 经验也不用担心,我们会在本书中讲解一些基本的分布式执行的概念。


不论你是数据分析师还是工程师,如果想读透这本书,就应当对 Python、Java、Scala 或者一门类似的编程语言有一些基本了解。另外,我们假设你已经有了关于数据存储的解决方案,所以不会讲到如何搭建一个数据存储系统,不过我们会介绍如何在常见的数据存储系统上读取和保存数据。即使你没用过这些编程语言也不必担心,有很多优秀的学习资源可以帮助你理解这些语言,我们在下文的相关书籍中列举了一些。

本书结构

本书结构清晰,章节是按照从前到后依次阅读的顺序组织的。在每一章的开头,我们会说明本章中的哪些小节对于数据科学家们更重要,而哪些小节则对于工程师们更为有用。话虽如此,我们还是希望书中的所有内容对两类读者都能有一定的帮助。


前两章将会带你入门,让你在自己的电脑上搭好一个基础的 Spark,并且让你对于用 Spark 能做什么有一个基本的概念。等我们弄明白了 Spark 的目标和 Spark 的安装之后,就会着重介绍 Spark shell。Spark shell 是开发 Spark 应用原型时非常有用的工具。后续几章则会详细介绍 Spark API、如何将 Spark 应用运行在集群上,以及 Spark 所提供的更高层的程序库支持,例如 SQL(数据库支持)和 MLlib(机器学习库)。

前言


随着并行数据分析变得越来越流行,各行各业的工作者都迫切需要更好的数据分析工具。Spark 应运而生,并且迅速火了起来。作为 MapReduce 的继承者,Spark 主要有三个优点。首先,Spark 非常好用。由于高级 API 剥离了对集群本身的关注,你可以专注于你所要做的计算本身,只需在自己的笔记本电脑上就可以开发 Spark 应用。其次,Spark 很快,支持交互式使用和复杂算法。最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。这三大优点也使得 Spark 可以作为学习大数据的一个很好的起点。


本书主要介绍 Spark,让读者能够轻松入门并玩转 Spark。你能从本书中学到如何让 Spark 在你的电脑上运行起来,并且通过交互式操作来学习 Spark 的 API。我们也会讲解一些用 Spark 作数据操作和分布式执行时的细节。最后,本书会带你畅游 Spark 上一些高级的程序库,包括机器学习、流处理、图计算和 SQL 查询。我们希望本书能够让你了解 Spark。不论你只有一台电脑还是有一个庞大的集群,Spark 都能成为令你运筹帷幄的数据分析工具。


Spark 作为下一代大数据处理引擎,在非常短的时间里崭露头角,并且以燎原之势席卷业界。Spark 对曾经引爆大数据产业革命的 Hadoop MapReduce 的改进主要体现在这几个方面:首先,Spark 速度更快;其次,Spark 丰富的 API 带来了更强大的易用性;最后,Spark 不单单支持传统批处理应用,更支持交互式查询、流式计算、机器学习、图计算等各种应用,满足各种不同应用场景下的需求。


我很荣幸能够一直密切地参与到 Spark 的开发中,伴随 Spark 一路走来,看着 Spark 从草稿纸上的原型成长为当下最活跃的大数据开源项目。如今,Spark 已经成为 Apache 基金会下最为活跃的项目之一。不仅如此,我也为结识 Spark 项目创始人 Matei Zaharia 以及其他几位 Spark 长期开发者 Patrick Wendell、Andy Konwinski 和 Holden Karau 感到由衷高兴。正是他们四位完成了本书的著作工作。


随着 Spark 的迅速流行,相关优秀参考资料匮乏的问题顿时突显出来。本书共有 11 章,包含许多专为渴望学习 Spark 的数据科学家、学生、开发者们设计的具体实例,大大缓解了 Spark 缺少优秀参考资料的问题。即使是没有大数据方面背景知识的读者,也可以把本书作为入门大数据领域的明智之选。我真挚地希望这本书能引领你和其他读者走进大数据这个令人激动的新领域,在多年之后依然令你回味无穷。


——Databricks 公司首席执行官,加州大学伯克利分校 AMPlab 联合主任 Ion Stoica

推荐序


近年来大数据逐渐升温,经常有人问起大数据为何重要。我们处在一个数据爆炸的时代,大量涌现的智能手机、平板、可穿戴设备及物联网设备每时每刻都在产生新的数据。当今世界,有 90% 的数据是在过去短短两年内产生的。到 2020 年,将有 500 多亿台的互联设备产生 Zeta 字节级的数据。带来革命性改变的并非海量数据本身,而是我们如何利用这些数据。大数据解决方案的强大在于它们可以快速处理大规模、复杂的数据集,可以比传统方法更快、更好地生成洞见。


一套大数据解决方案通常包含多个重要组件,从存储、计算和网络等硬件层,到数据处理引擎,再到利用改良的统计和计算算法、数据可视化来获得商业洞见的分析层。这中间,数据处理引擎起到了十分重要的作用。毫不夸张地说,数据处理引擎之于大数据就像 CPU 之于计算机,或大脑之于人类。


早在 2009 年,Matei Zaharia 在加州大学伯克利分校的 AMPLab 进行博士研究时创立了 Spark 大数据处理和计算框架。不同于传统的数据处理框架,Spark 基于内存的基本类型(primitive)为一些应用程序带来了 100 倍的性能提升。Spark 允许用户程序将数据加载到集群内存中用于反复查询,非常适用于大数据和机器学习,日益成为最广泛采用的大数据模块之一。包括 Cloudera 和 MapR 在内的大数据发行版也在发布时添加了 Spark。


目前,Spark 正在促使 Hadoop 和大数据生态系统发生演变,以更好地支持端到端的大数据分析需求,例如:Spark 已经超越 Spark 核心,发展到了 Spark streaming、SQL、MLlib、GraphX、SparkR 等模块。学习 Spark 和它的各个内部构件不仅有助于改善大数据处理速度,还能帮助开发者和数据科学家更轻松地创建分析应用。从企业、医疗、交通到零售业,Spark 这样的大数据解决方案正以前所未见的力量推进着商业洞见的形成,带来更多更好的洞见以加速决策制定。


在过去几年中,我的部门有机会与本书的作者合作,向 Apache Spark 社区贡献成果,并在英特尔架构上优化各种大数据和 Spark 应用。《Spark 快速大数据分析》的出版为开发者和数据科学家提供了丰富的 Spark 知识。更重要的是,这本书不是简单地教开发者如何使用 Spark,而是更深入介绍了 Spark 的内部构成,并通过各种实例展示了如何优化大数据应用。我向大家推荐这本书,或更具体点,推荐这本书里提倡的优化方法和思路,相信它们能帮助你创建出更好的大数据应用。


英特尔软件服务事业部全球大数据技术中心总经理 马子雅


2015 年 7 月于加州圣克拉拉



来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1139

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

Spark大数据处理

阅读数 187

Spark大数据处理:

博文 来自: u013411339
没有更多推荐了,返回首页