Spark学习笔记三(RDD常用操作)
来源:互联网 发布:淘宝店铺过户流程图 编辑:程序博客网 时间:2024/05/21 06:42
一些操作对所有类型的RDD都可以使用,而另一些操作只能在特殊的RDD类型使用。例如只有对于元素都是数字的RDD才能计算平均值。在下面的操作都是在RDD上通用的操作。
Transformations
map()
Map函数和MapReduce中的map意义相同,即返回一个新RDD,其元素是输入RDD中元素,按照某个规则得到的新元素。输入输出的RDD中包含的元素是一一对应的。
例如下例中,将nums中的每个元素自乘。
nums = sc.parallelize([1, 2, 3, 4])
squared = nums.map(lambda x: x * x)flatmap()
有时需要让RDD中的一个元素产生多个对应元素。如下例:
lines = sc.parallelize([“hello world”, “hi”])
words = lines.flatMap(lambda line: line.split(” “))filter()
返回一个新RDD,其元素是输入RDD元素中符合过滤条件的那些元素。union()
返回一个包含两个输入RDD元素的新RDD。intersection()
返回一个新RDD,其元素是两个输入RDD元素的交集。subtract()
返回一个新RDD,其元素是第一个输入RDD的元素且不是第二个输入RDD的元素。sample()
返回一个新RDD,其元素是输入RDD元素中符合按规则sample出来的那些元素。
Actions
reduce()
Reduce函数和MapReduce中的Reduce意义相同,用于对RDD中的数据做聚合操作。例如:
rdd = sc.parallelize([1,2,3,4,5])
rdd.reduce(lambda a,b:a+b)
其中输入参数为两个,输出1个。a代表聚合结果,b代表RDD中的元素。a+b则表示a=a+b,即将RDD中的所有元素累加到a上,且a为聚合的结果,15.count()
返回RDD元素的个数。collect()
有多种方式可以将RDD中的所有元素返回driver program,collect()是常用的一个。大家知道一个RDD的多个分区通常分布在集群中的各个节点内存里,而collect()将这些分散的RDD分区数据全部传回driver program所在的机器,合并后返回给driver program。
因此如果数据集很大,可能超过driver program所在机器的内存时,不建议使用collect()。take(n)
返回指定个数的RDD元素,返回的元素是随机的。top()
默认安装RDD中元素的顺序返回一个元素,也可以使用比较函数来返回最大或最小的元素。aggregate()
和reduce类似,但可以返回不同类型的RDD。
另有一类常用的RDD,称为Pair RDD。Pair RDD的元素是一个key value pair组成的元组:
sc.parallelize([(“a”, 3), (“b”, 4), (“a”, 1)])
这里“a”为key,1为value。
Pair RDD很常用,因为我们经常需要按照key对数据做聚合操作。这类RDD操作操作起来略有不同。例如下例,需要对key和value分别处理:
input=sc.parallelize([“1 test string”,”2 test a long string”])
pair = input.map(lambda x: (x.split(” “)[0], x))
result = pair.filter(lambda x: len(x[1]) < 15)
result.collect()
另外reduce的用法也有变化:
from operator import add
rdd = sc.parallelize([(“a”, 1), (“b”, 1), (“a”, 1)])
sorted(rdd.reduceByKey(add).collect())
返回结果:[(‘a’, 2), (‘b’, 1)]
上例需要注意的是,由于调用redueceByKey会导致Spark在各个分区上分别计算当前分区的聚合值,因此redueceByKey不会将结果返回给driver program,在它之后可调用collect()将结果汇总后返回给driver program。
- Spark学习笔记三(RDD常用操作)
- 学习spark:三、RDD的action操作
- Spark学习之RDD常用操作
- Spark常用RDD操作汇总
- spark RDD常用函数/操作
- spark学习三 RDD详解
- Spark学习笔记(三)-RDD(弹性分布式数据集)
- Spark学习笔记二 RDD
- spark RDD解密学习笔记
- Spark学习笔记 --- RDD详解
- Spark学习笔记 --- 什么是RDD
- Spark学习笔记 --- spark RDD加载文件
- Learning Spark——RDD常用操作
- Spark笔记三之RDD,算子
- Spark笔记:RDD基本操作(一)
- Spark笔记:RDD基本操作(上)
- Spark笔记:RDD基本操作(下)
- Spark笔记:RDD基本操作(上)
- <c:if>------JSTL
- jsp下页面跳转的几种方法小结
- Android Download机制详解(一)DocumentUI部分
- 仿QQ长按弹出功能菜单
- iOS 沙盒文件操作
- Spark学习笔记三(RDD常用操作)
- 怎样获取当前点击时间的对象
- Android View中getViewTreeObserver().addOnGlobalLayoutListener()
- mysql 1129 error
- Android基础篇(三)——Android中的Activity简单介绍
- Java线程
- 简单冒泡排序
- 10.如何设置全局字体
- 关于Xcode遇到崩溃问题那些事(一)