Spark大数据算法
Mahmoud Parsian
苏金国 译
出版时间:2024年05月
页数:485
“如果你希望采用一种可伸缩的方式实现现有算法,或者正在使用Spark开发新的自定义算法,这本书将是一个绝好的资源。”
——Matei Zaharia
斯坦福大学计算机科学副教授;Databricks首席技术专家;Apache Spark创始人

Apache Spark不仅速度快,易于使用,还提供了丰富的分析能力和多语言支持,掌握这个集群计算框架的实用知识已经成为数据工程师和数据科学家的必备技能。利用这本实用指南,想要了解Spark的人能从中学到实用的PySpark算法和示例。
每一章中,本书作者会向你展示如何用一组Spark转换和算法解决一个数据问题。你会了解如何应对涉及ETL、设计模式、机器学习算法、数据分区和基因组分析的问题。每个技巧都提供了利用PySpark驱动器的PySpark算法和shell脚本。
利用这本书,你将学习以下内容:
● 了解如何选择Spark转换实现优化的解决方案。
● 探索强大的转换和归约,包括reduceByKey()、combineByKey()和mapPartitions()。
● 理解数据分区以实现优化查询。
● 使用PySpark设计模式构建和应用模型。
● 对图数据应用motif查找算法。
● 使用GraphFrames API分析图数据。
● 对临床医学和基因组数据应用PySpark算法。
● 学习如何在ML算法中使用和应用特征工程。
● 了解并使用实用的数据设计模式。
  1. 前言
  2. 第I部分 基础知识
  3. 第1章 Spark和PySpark简介
  4. 1.1 为什么使用Spark完成数据分析
  5. 1.1.1 Spark生态系统
  6. 1.1.2 Spark架构
  7. 1.2 PySpark的能力
  8. 1.3 Spark数据抽象
  9. 1.3.1 RDD示例
  10. 1.3.2 Spark RDD操作
  11. 1.3.3 DataFrame 示例
  12. 1.4 使用PySpark Shell
  13. 1.4.1 启动PySpark Shell
  14. 1.4.2 由集合创建RDD
  15. 1.4.3 聚合和合并键的值
  16. 1.4.4 过滤RDD的元素
  17. 1.4.5 对类似的键分组
  18. 1.4.6 聚合类似键的值
  19. 1.5 使用DataFrame的ETL示例
  20. 1.5.1 抽取
  21. 1.5.2 转换
  22. 1.5.3 加载
  23. 1.6 小结
  24. 第2章 转换实战
  25. 2.1 DNA碱基计数示例
  26. 2.1.1 DNA碱基计数问题
  27. 2.1.2 FASTA格式
  28. 2.1.3 示例数据
  29. 2.2 DNA碱基计数解决方案1
  30. 2.2.1 步骤1:由输入创建一个RDD[String]
  31. 2.2.2 步骤2:定义一个映射器函数
  32. 2.2.3 步骤3:得出DNA字母频度
  33. 2.2.4 解决方案1的优缺点
  34. 2.3 DNA碱基计数解决方案2
  35. 2.3.1 步骤1:由输入创建一个RDD[String]
  36. 2.3.2 步骤2:定义一个映射器函数
  37. 2.3.3 步骤3:得出DNA字母频度
  38. 2.3.4 解决方案2的优缺点
  39. 2.4 DNA碱基计数解决方案3
  40. 2.4.1 mapPartitions()转换
  41. 2.4.2 步骤1:由输入创建一个RDD[String]
  42. 2.4.3 步骤2:定义函数处理一个分区
  43. 2.4.4 步骤3:对各个分区应用自定义函数
  44. 2.4.5 解决方案3的优缺点
  45. 2.5 小结
  46. 第3章 映射器转换
  47. 3.1 数据抽象和映射器
  48. 3.2 转换是什么?
  49. 3.2.1 懒转换
  50. 3.2.2 map()转换
  51. 3.2.3 DataFrame映射器
  52. 3.3 flatMap()转换
  53. 3.3.1 map()与flatMap()
  54. 3.3.2 对DataFrame应用flatMap()
  55. 3.4 mapValues()转换
  56. 3.5 flatMapValues()转换
  57. 3.6 mapPartitions()转换
  58. 3.6.1 处理空分区
  59. 3.6.2 优缺点
  60. 3.6.3 DataFrame和mapPartitions()转换
  61. 3.7 小结
  62. 第4章 Spark中的归约
  63. 4.1 创建(键,值)对RDD
  64. 4.2 归约转换
  65. 4.3 Spark的归约
  66. 4.4 简单热身示例
  67. 4.4.1 使用reduceByKey()的解决方案
  68. 4.4.2 使用groupByKey()的解决方案
  69. 4.4.3 使用aggregateByKey()的解决方案
  70. 4.4.4 使用combineByKey()的解决方案
  71. 4.5 什么是Monoid?
  72. 4.6 电影问题
  73. 4.6.1 要分析的输入数据集
  74. 4.6.2 aggregateByKey()转换
  75. 4.6.3 使用aggregateByKey()的第一个解决方案
  76. 4.6.4 使用aggregateByKey()的第二个解决方案
  77. 4.6.5 使用groupByKey()的完整PySpark解决方案
  78. 4.6.6 使用reduceByKey()的完整PySpark解决方案
  79. 4.6.7 使用combineByKey()的完整PySpark解决方案
  80. 4.7 归约中的洗牌步骤
  81. 4.7.1 groupByKey()的洗牌步骤
  82. 4.7.2 reduceByKey()的洗牌步骤
  83. 4.8 小结
  84. 第II部分 处理数据
  85. 第5章 数据分区
  86. 5.1 分区简介
  87. 5.2 管理分区
  88. 5.2.1 默认分区
  89. 5.2.2 显式分区
  90. 5.3 为SQL查询完成物理分区
  91. 5.4 Spark中的数据物理分区
  92. 5.4.1 分区为文本格式
  93. 5.4.2 分区为Parquet格式
  94. 5.5 如何查询分区数据
  95. 5.6 小结
  96. 第6章 图算法
  97. 6.1 图介绍
  98. 6.2 GraphFrames API
  99. 6.2.1 如何使用GraphFrames
  100. 6.2.2 GraphFrames函数和属性
  101. 6.3 GraphFrames算法
  102. 6.3.1 查找三角形
  103. 6.3.2 Motif查找
  104. 6.4 实际示例
  105. 6.4.1 基因分析
  106. 6.4.2 社交推荐
  107. 6.4.3 Facebook朋友圈
  108. 6.4.4 连通分量
  109. 6.4.5 分析航班数据
  110. 6.5 小结
  111. 第7章 与外部数据源交互
  112. 7.1 关系数据库
  113. 7.1.1 读取数据库
  114. 7.1.2 将DataFrame写入数据库
  115. 7.2 读取文本文件
  116. 7.3 读写CSV文件
  117. 7.3.1 读CSV文件
  118. 7.3.2 写CSV文件
  119. 7.4 读写JSON文件
  120. 7.4.1 读JSON文件
  121. 7.4.2 写JSON文件
  122. 7.5 读写Amazon S3
  123. 7.5.1 从Amazon S3读取
  124. 7.5.2 写入Amazon S3
  125. 7.6 读写Hadoop文件
  126. 7.6.1 读Hadoop文本文件
  127. 7.6.2 写Hadoop文本文件
  128. 7.6.3 读写HDFS SequenceFile
  129. 7.7 读写Parquet文件
  130. 7.7.1 写Parquet文件
  131. 7.7.2 读Parquet文件
  132. 7.8 读写Avro文件
  133. 7.8.1 读Avro文件
  134. 7.8.2 写Avro文件
  135. 7.9 读写MS SQL Server
  136. 7.9.1 写MS SQL Server
  137. 7.9.2 读MS SQL Server
  138. 7.10 读取图像文件
  139. 7.11 小结
  140. 第8章 排名算法
  141. 8.1 秩序乘积
  142. 8.1.1 计算秩序乘积
  143. 8.1.2 秩序乘积描述
  144. 8.1.3 秩序乘积示例
  145. 8.1.4 PySpark解决方案
  146. 8.2 PageRank
  147. 8.2.1 PageRank的迭代计算
  148. 8.2.2 使用RDD的自定义PySpark PageRank算法实现
  149. 8.2.3 使用邻接矩阵的自定义PySpark PageRank算法实现
  150. 8.2.4 使用GraphFrames实现的PageRank
  151. 8.3 小结
  152. 第III部分 数据设计模式
  153. 第9章 经典数据设计模式
  154. 9.1 输入–映射–输出
  155. 9.1.1 RDD解决方案
  156. 9.1.2 DataFrame解决方案
  157. 9.1.3 扁平映射器功能
  158. 9.2 输入–过滤–输出
  159. 9.2.1 RDD解决方案
  160. 9.2.2 DataFrame解决方案
  161. 9.2.3 DataFrame过滤器
  162. 9.3 输入–映射–归约–输出
  163. 9.3.1 RDD解决方案
  164. 9.3.2 DataFrame解决方案
  165. 9.4 输入–多重–映射–归约–输出
  166. 9.4.1 RDD解决方案
  167. 9.4.2 DataFrame解决方案
  168. 9.5 输入–映射–组合器–归约–输出
  169. 9.6 输入–映射分区–归约–输出
  170. 9.7 倒排索引
  171. 9.7.1 问题陈述
  172. 9.7.2 输入
  173. 9.7.3 输出
  174. 9.7.4 PySpark解决方案
  175. 9.8 小结
  176. 第10章 实用数据设计模式
  177. 10.1 映射器内部组合
  178. 10.1.1 基本MapReduce算法
  179. 10.1.2 按记录映射器内部组合
  180. 10.1.3 按分区映射器内部组合
  181. 10.2 Top-10
  182. 10.2.1 Top-N形式化描述
  183. 10.2.2 PySpark解决方案
  184. 10.2.3 查找Bottom 10
  185. 10.3 MinMax
  186. 10.3.1 解决方案1:传统MapReduce
  187. 10.3.2 解决方案2:排序
  188. 10.3.3 解决方案3:Spark的mapPartitions()
  189. 10.4 复合模式和Monoid
  190. 10.4.1 Monoid
  191. 10.4.2 Monoid和非Monoid示例
  192. 10.4.3 非Monoid MapReduce示例
  193. 10.4.4 Monoid MapReduce示例
  194. 10.4.5 Monoid均值计算的PySpark实现
  195. 10.4.6 函子和幺半群
  196. 10.4.7 幺半群使用小结
  197. 10.5 分箱
  198. 10.6 排序
  199. 10.7 小结
  200. 第11章 连接设计模式
  201. 11.1 连接操作介绍
  202. 11.2 MapReduce中的连接
  203. 11.2.1 映射阶段
  204. 11.2.2 归约器阶段
  205. 11.2.3 PySpark实现
  206. 11.3 使用RDD的映射端连接
  207. 11.4 使用DataFrame的映射端连接
  208. 11.4.1 步骤1:创建Airports缓存
  209. 11.4.2 步骤2:创建Airlines缓存
  210. 11.4.3 步骤3:创建事实表
  211. 11.4.4 步骤4:应用映射端连接
  212. 11.5 使用Bloom过滤器的高效连接
  213. 11.5.1 Bloom过滤器
  214. 11.5.2 一个简单的Bloom过滤器示例
  215. 11.5.3 Python中的Bloom过滤器
  216. 11.5.4 PySpark中使用Bloom过滤器
  217. 11.6 小结
  218. 第12章 PySpark中的特征工程
  219. 12.1 特征工程介绍
  220. 12.2 增加新特征
  221. 12.3 应用UDF
  222. 12.4 创建管道
  223. 12.5 二值化数据
  224. 12.6 填充
  225. 12.7 分词
  226. 12.7.1 Tokenizer
  227. 12.7.2 RegexTokenizer
  228. 12.7.3 管道分词
  229. 12.8 标准化
  230. 12.9 归一化
  231. 12.9.1 使用管道缩放一列
  232. 12.9.2 在多列上使用 MinMaxScaler
  233. 12.9.3 使用Normalizer归一化
  234. 12.10 字符串索引
  235. 12.10.1 对单列应用StringIndexer
  236. 12.10.2 对多列应用StringIndexer
  237. 12.11 向量组合
  238. 12.12 分桶
  239. 12.12.1 Bucketizer
  240. 12.12.2 QuantileDiscretizer
  241. 12.13 对数转换
  242. 12.14 独热编码
  243. 12.15 TF-IDF
  244. 12.16 FeatureHasher
  245. 12.17 SQLTransformer
  246. 12.18 小结
书名:Spark大数据算法
作者:Mahmoud Parsian
译者:苏金国 译
国内出版社:中国电力出版社
出版时间:2024年05月
页数:485
书号:978-7-5198-8772-8
原版书书名:Data Algorithms with Spark
原版书出版商:O'Reilly Media
Mahmoud Parsian
 
Mahmoud Parsian,计算机科学博士,是一位热衷于实践的软件专家,作为开发人员、设计人员、架构师和作者,他有30多年的软件开发经验。目前领导着Illumina的大数据团队,在过去15年间,他主要从事Java (服务器端)、数据库、MapReduce和分布式计算的有关工作。Mahmoud还著有《JDBC Recipes》和《JDBC Metadata, MySQL,and Oracle Recipes》等书(均由Apress出版)。
 
 
本书的封面动物是一只棘尾雷雀(学名:Aphrastura spinicauda)。这种小型鸟常见于智利和阿根廷的温带森林以及亚热带干草地和灌木丛。棘尾雷雀有黑色的头部和喙,颈部和肚子为白色,还有延伸到脖子后面的橙色的“眉毛”。它们的上覆羽为黑色,顶端白色,翅飞羽却是红橙色,带浅棕色条纹。棘尾雷雀全身以及独特的尾巴混合了黑色、棕色和铁锈色羽毛,并有狭窄突出的尾羽,这也是它得名“棘尾”的原因。
这些鸟只有13~14厘米长,重约10~13克,不到半盎司!它们非常活跃,充满好奇,而且喜欢鸣叫,在树叶、苔藓、地衣、树枝和树干中觅食,偶尔也会在地面上寻找食物。它们在南半球春季和夏季(10月到下一年的1月)产卵,在树干、缝隙甚至屋顶下筑巢。雌鸟会在由藤蔓、树根、草和羽毛搭建的巢中产下3~4枚卵,雄鸟和雌鸟共同孵化两周左右。与大多数鸟类不同,棘尾雷雀不迁徙,但它们是一夫一妻制,通常成对出现,或者常常组成不超过15只鸟的小群体。棘尾雷雀的数量很稳定,被国际自然保护联盟认为是最不受关注的物种。O’Reilly封面上的很多动物都濒临灭绝;所有这些动物对我们的世界都很重要。
购买选项
定价:148.00元
书号:978-7-5198-8772-8
出版社:中国电力出版社