Learning Spark第二版中文.pdf
http://www.100md.com
2020年11月16日
![]() |
| 第1页 |
![]() |
| 第10页 |
![]() |
| 第14页 |
![]() |
| 第26页 |
![]() |
| 第41页 |
参见附件(6239KB,371页)。
Learning Spark第二版
随着并行数据分析变得越来越普遍,许多领域的从业者都在寻找更简单的工具来完成这项任务。Apache Spark很快成为最受欢迎的扩展和推广MapReduce的工具之一,小编今天给大家准备了Learning Spark第二版,欢迎

相关内容部分预览








内容简介
随着并行数据分析变得越来越普遍,许多领域的从业者都在寻找更简单的工具来完成这项任务。Apache Spark很快成为最受欢迎的扩展和推广MapReduce的工具之一。Spark提供了三个主要优势。
首先,它易于使用——您可以在笔记本电脑上开发应用程序,使用高级应用编程接口,让您专注于计算内容。第二,Spark速度快,支持交互式使用和复杂的算法。第三,Spark是一个通用的引擎,允许您组合多种类型的计算(例如,SQL查询、文本处理和机器学习),这些计算以前可能需要不同的引擎。
这些特性使Spark成为了解大数据的绝佳起点。
这本入门书的目的是让你快速启动和运行Spark。
您将学习如何在笔记本电脑上和运行Spark,并使用它交互式地学习应用编程接口。到了那里,我们将讨论可用操作和分布式执行的细节。最后,您将参观Spark内置的高级库,包括机器学习、流处理和SQL库。我们希望这本书能给你快速解决数据分析问题的工具,无论你是在一台机器上还是在数百台机器上。
作者介绍
作者要感谢为这本书提供反馈的评论家:
约瑟夫·布拉德利,戴夫·布里奇兰,查兹·钱德勒,米克·戴维斯,萨姆·德里蒂,维达
哈,安德鲁·戈尔,迈克尔·格雷森,简·约彭,斯蒂芬·朱,杰夫·马丁内斯,乔希
马宏宁、安德鲁·奥、迈克·帕特森、乔希·罗森、布鲁斯·萨尔温斯基、孟祥瑞和雷扎·扎德。
作者要特别感谢大卫·安杰伊斯基、大卫·巴特勒、朱莉叶·胡格兰、马雷克·科沃杰伊、塔卡Shinagawa、黛博拉·西格尔、诺尔曼博士
穆勒、阿里·戈德西和萨梅尔·法鲁克。他们对大部分章节提供了详细的反馈,并帮助指出了许多重要的改进。
Learning Spark (Python版) 学习笔记(一-RDD 基本概念与命令
《Learning Spark》这本书算是Spark入门的必读书了,中文版是《Spark快速大数据分析》,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足,中文译版评分8.4,评论一片好评,有点意思。我倒觉得这本书可以作为官方文档的一个补充,刷完后基本上对Spark的一些基本概念、码简单的程序是没有问题的了。这本书有一个好处是它是用三门语言写的,Python/Java/Scala,所以适用性很广,我的观点是,先精通一门语言,再去学其他语言。由于我工作中比较常用的是Python,所以就用把Python相关的命令总结一下。下一阶段再深入学习Java和Scala。这一篇总结第一章-第三章的重点内容。
说到Spark,就不得不提到RDD,RDD,字面意思是弹性分布式数据集,其实就是分布式的元素集合。Python的基本内置的数据类型有整型、字符串、元祖、列表、字典,布尔类型等,而Spark的数据类型只有RDD这一种,在Spark里,对数据的所有操作,基本上就是围绕RDD来的,譬如创建、转换、求值等等。所有RDD的转换都是lazy(惰性求值)的,RDD的转换操作会生成新的RDD,新的RDD的数据依赖于原来的RDD的数据,每个RDD又包含多个分区。那么一段程序实际上就构造了一个由相互依赖的多个RDD组成的有向无环图(DAG)。并通过在RDD上执行动作将这个有向无环图作为一个Job提交给Spark执行。理解RDD后可以避免以后走很多弯路。关于RDD的特点,可以搜到很多资料,其实我们只需要理解两点就可以了:
1.不可变
2.分布式
有人会觉得很奇怪,如果RDD不可变,那么在进行数据操作的时候,怎么改变它的值,怎么进行计算呢?其实RDD支持两种操作:
1.Tansformation(转化操作):返回值还是一个RDD
2.Action(行动操作):返回值不是一个RDD
第一种Transformation是返回一个新的RDD,如map(),filter()等。这种操作是lazy(惰性)的,即从一个RDD转换生成另一个RDD的操作不是马上执行,只是记录下来,只有等到有Action操作是才会真正启动计算,将生成的新RDD写到内存或hdfs里,不会对原有的RDD的值进行改变。而Action操作才会实际触发Spark计算,对RDD计算出一个结果,并把结果返回到内存或hdfs中,如count(),first()等。
通俗点理解的话,就是假设你写了一堆程序,里面对数据进行了多次转换,这个时候实际上没有计算,就只是放着这里。在最后出结果的时候会用到Action操作,这个时候Action会执行与之相关的转换操作,运算速度会非常快(一是Action不一定需要调用所有的transformation操作,二是只有在最后一步才会计算相关的transformation操作)。如果Transformation没有lazy性质的话,每转换一次就要计算一次,最后Action操作的时候还要计算一次,会非常耗内存,也会极大降低计算速度。
还有一种情况,如果我们想多次使用同一个RDD,每次都对RDD进行Action操作的话,会极大的消耗Spark的内存,这种情况下,我们可以使用RDD.persist()把这个RDD缓存下来,在内存不足时,可以存储到磁盘(disk)里。在Python中,储存的对象永远是通过Pickle库序列化过的,所以社不设置序列化级别不会产生影响。
RDD的性质和操作方式讲完了,现在来说说怎么创建RDD,有两种方式
1.读取一个外部数据集
2.在内存中对一个集合进行并行化(parallelize)
Learning Spark第二版截图







