Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
《Learning Spark》这本书算是Spark入门的必读书了,中文版是《Spark快速大数据分析》,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足,中文译版评分8.4,评论一片好评,有点意思。我倒觉得这本书可以作为官方文档的一个补充,刷完后基本上对Spark的一些基本概念、码简单的程序是没有问题的了。这本书有一个好处是它是用三门语言写的,Python/Java/Scala,所以适用性很广,我的观点是,先精通一门语言,再去学其他语言。由于我工作中比较常用的是Python,所以就用把Python相关的命令总结一下。下一阶段再深入学习Java和Scala。这一篇总结第一章-第三章的重点内容。
1 A = [1,2,3,4,5]
2 lines = sc.parallelize(A)
3 #另一种方式
4 lines = sc.parallelize([1,2,3,4,5])
- 常见的Transformation操作:
map( )和flatMap( )的联系和区别
map( ):接收一个函数,应用到RDD中的每个元素,然后为每一条输入返回一个对象。 filter( ):接收一个函数,将函数的元素放入新的RDD中返回。 flatMap( ):接收一个函数,应用到RDD中的每个元素,返回一个包含可迭代的类型(如list等)的RDD,可以理解为先Map(),后flat().


1 distinct( )、union( )、intersection( )、subtract( )
2 distinct( ):去重
3 union( ):两个RDD的并集
4 intersection( ):两个RDD的交集
5 subtract( ):两个RDD的补集
6 cartesian( ):两个RDD的笛卡尔积(可以应用于计算相似度中,如计算各用户对各种产品的预期兴趣程度)

- 常见的Action操作:

1 reduce( ):接收一个函数作为参数,这个函数要操作两个相同元素类型的RDD,也返回一个同样类型的RDD,可以计算RDD中元素的和、个数、以及其他聚合类型的操作。
2
3 fold( ):和reduce一样,但需要提供初始值。
4
5 aggregate( ):和fold类似,但通常返回不同类型的函数。
6
7 注:
关于fold()和aggregate(),再说点题外话。fold()只能做同构聚合操作,就是说,如果你有一个RDD[X],通过fold,你只能构造出一个X。但是如果你想通过RDD[X]构造一个Y呢?那就得用到aggregate()了,使用aggregate时,需要提供初始值(初始值的类型与最终返回的类型相同),然后通过一个函数把一RDD的元素合并起来放到累加器里,再提供一个函数将累加器两两相加。由此可以看出,fold()需要保证灭个partition能够独立进行运算,而aggregate()对于不同partition(分区)提交的最终结果专门定义了一个函数来进行处理。

RDD还有很多其他的操作命令,譬如collect(),count(),take(),top(),countByValue(),foreach()等,限于篇幅,就不一一表述了。

1 class MyClass(object):
2 def __init__(self):
3 self.field = “Hello”
4
5 def doStuff(self, rdd):
6 #报错:因为在self.field中引用了整个self
7 return rdd.map(lambda s: self.field + x)

解决方法:直接把你需要的字段拿出来放到一个局部变量里,然后传递这个局部变量就可以了。

1 class MyClass(object):
2 def __init__(self):
3 self.field = “Hello”
4
5 def doStuff(self, rdd):
6 #将需要的字段提取到局部变量中即可
7 field = self.field
8 return rdd.map(lambda s: field + x)

前面三章讲了Spark的基本概念和RDD的特性以及一些简单的命令,比较简单。后面三章主要讲了键值对操作、数据的读取和保存以及累加器、广播变量等,下周再更新。
原文转自:http://www.cnblogs.com/charlotte77/p/5412709.html
Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令的更多相关文章
- 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
<Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- 【原】Learning Spark (Python版) 学习笔记(四)----Spark Sreaming与MLlib机器学习
本来这篇是准备5.15更的,但是上周一直在忙签证和工作的事,没时间就推迟了,现在终于有时间来写写Learning Spark最后一部分内容了. 第10-11 章主要讲的是Spark Streaming ...
- 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...
- 【数据结构与算法Python版学习笔记】图——基本概念及相关术语
概念 图Graph是比树更为一般的结构, 也是由节点和边构成 实际上树是一种具有特殊性质的图 图可以用来表示现实世界中很多有意思的事物,包括道路系统.城市之间的航班.互联网的连接,甚至是计算机专业的一 ...
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
- 【数据结构与算法Python版学习笔记】算法分析
什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ...
- 【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链
散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ...
- 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...
随机推荐
- linux服务器安装svn并上传项目
一.安装svn (1)安装svn服务器: yum install subversion (2)查看版本(随自己意愿): svnserve --version 二.创建svn仓库并配置 (1)创建svn ...
- springboot项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde
springboot项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde 创建 ...
- Linux基础-13-源码安装软件包
1.准备 安装必要软件 yum install gcc-* glibc-* -y yum groupinstall '开发工具' -y 2.解包 tar xvf 包名 3.运行configure脚本, ...
- 从零开始学Flask框架-006
重定向和用户会话 因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求.如果这个请求是一个包含表单数据的POST 请求,刷新页面后会再次提交表单. 基于这个原因,最好别让Web 程序把POST ...
- Redis--set类型操作命令
集合类型 set redis 的 Set 是 string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据 集合类型 set ——常用命令 sadd /smembers /sismemb ...
- 【ES6】数组的扩展
1.Array.from(): 将伪数组对象和遍历的对象转为真数组 如果一个对象的键都是正整数或者0,并且有 Length属性,那么这个对象很想数组,称它为伪数组. 伪数组: let obj = { ...
- python之(urllib、urllib2、lxml、Selenium+PhantomJS)爬虫
一.最近在学习网络爬虫的东西,说实话,没有怎么写过爬虫,Java里面使用的爬虫也没有怎么用过.这里主要是学习Python的时候,了解到Python爬虫的强大,和代码的简介,这里会简单的从入门看是说起, ...
- 3_PHP表达式_5_数据类型转换_类型自动转换
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 1.布尔型数据参与算数运算时,TRUE被转换为整数1,FALSE被 ...
- CSS3Ps -Photoshop图层特效转CSS3代码
CSS3Ps 这个ps插件可以将ps图层特效直接转化成css3代码,对前端非常有益. 插件下载:http://css3ps.com/Download/
- Canvas 绘制一个像素风电子时钟
想法是在 Canvas 上绘制由小方块组成的数字. 第一步是实现绘制小方块的方法,先画出一个边长为 5 的 10x10 个方块,使用两个 for 循环很简单就能完成. for (let i = 0; ...