Spark之核心---RDDs(2)
来源:互联网 发布:python数字转换字符串 编辑:程序博客网 时间:2024/06/05 10:38
前言
在第一章,已经介绍过了RDDs的基本概念,创建方法和特性。那么在本章将介绍RDD的基本操作方法。如果没看过第一篇的点击链接:Spark之核心—RDDs(1)
RDD基本操作方法之Transformation
顾名思义,Transformation时转换的意思,在RDD中的含义就是从之前的RDD构建一个新的RDD,像map(),filter()等。下面将具体介绍这些操作方法:
- map():想必熟悉编程的朋友对这个函数并不陌生,是映射的意思,生成的结果将是一个键值对。举个例子
val lines2 = lines.map(word => (word,1))
其中:
scala> val lines = sc.textFile("../testfile/test")scala> lines.foreach(println)Hello Spark!I love xyj!I love zyh! Hello World!
lines的内容如上所示,lines2是对lines这个RDD的操作结果的一个新RDD,我们来看一下结果:
scala> lines2.foreach(println)(I love xyj!,1)(I love zyh! ,1)(Hello Spark!,1)(Hello World!,1)即把行数据映射成键值对的形式,由于没有split分词,所以每行就当作一个单词吧。
- filter():返回值包含满足filter函数元素的新RDD,在前一篇已经应用过。
- flatmap():对每个输入元素,输出多个输出元素,将所有的存在一个数组中。更形象的理解为将多个RDD压扁的意思,返回一个新的RDD。例如:[1,2,3,4],[5,6,7,8],flatmap的结果为:[1,2,3,4,5,6,7,8]
- 集合运算包括去重,交并集,等各种操作
RDD基本操作方法之Action
Action:最终计算出一个结果,形式如count(),save,driver program或者存在文件系统中。
- reduce():累加,计数,其他类型的聚集操作。
例如:
val rdd = sc.parallelize(Array(1,2,3,3))rdd.reduce((x,y) => x+y)结果为: 1+2+3+3 = 10
- collect():遍历整个RDD,向driver pogram返回RDD的内容。不过利用collect的时候要注意内存问题,当数据量不是很大时,利用collect可以,但是有大量数据容量超过内存时,就要利用saveAsTextFile()等action操作。
- take (n):返回RDD的n个元素(同时尝试访问最少的分区),是随机无序的。
- top():比较器
- foreach():输出RDD内容,不返回到本地,配合print或者其他输出函数打印出数据,方便测试使用。
key-value对型RDDs的操作
由于key-value型的RDD在spark中应用广泛,所以这部分单独拿出来总结一下。
- 创建:利用map()函数创建。
- 操作:
1.combineByKey(createCombiner,mergeValue,mergeCombiners,partitioner):遍历所有的分区(partitions),如果是新的key值,就调用createCombiner,如果已经遍历过这个key值,就调用vergeValue,之后再合计整合每个分区得到的结果汇总mergeCombiners。这个函数是最为常见的基于key的聚合函数,返回类型可以与输入类型不一样。下面举个例子,求两个人的成绩总和:
(jake,80.0)(jake,90.0)(jake,85.0)(mike,85.0)(mike,92.0)(mike,90.0) 以上是原始数据,下面定义函数: combineByKey( score => (1,score); (c1: (Int,Double), newScore) => (c1._1,c1._2+newScore)); (c1:(Int,Double), c2:(Int,Double) => (c1._1+c2._1,c1._2+c2._2)) 其中score 为value值,(1,score)中的1表示第一次出现,记为1.Int表示几门课。
2.reduceByKey(func)
eg:{(1,2),(3,4),(3,6)}rdd.reduceByKey((x,y) => x+y)得到结果:{(1,2),(3,10)}
3.groupByKey():相同key的分到一个组。
4.mapValues(func):对每个key中的每个value值进行相同操作。
5.flatMapValues:符号化的时候使用。
6.keys(),values()返回key和value值。
7.sortByKey():按照key排序返回RDD
阅读全文
0 0
- Spark之核心---RDDs(2)
- Spark之核心---RDDs(1)
- Spark, Shark, and RDDs
- 从RDDs到Spark
- Spark RDDs 编程
- spark Rdds介绍
- spark,keyValue对RDDs
- Spark学习笔记(二)-弹性分布式数据集RDDs
- RDDs, Spark Memory, and Execution
- Spark (Python版) 零基础学习笔记(五)—— Spark RDDs编程
- Spark核心是什么,如何使用Spark(之二)
- RDDs
- spark 对 RDDs的基础操作 整理
- spark之核心概念简介
- spark 不支持 嵌入RDDs or 用户定义的函数 that refer to other RDDs 【未完待续】
- Spark大数据处理之从WordCount看Spark大数据处理的核心机制(1)
- Learning Spark 学习笔记 第三章 RDDs编程
- Spark PG2. RDDs 并行集合 外部数据集
- PHPCMS V9中APP_PATH修改
- xmlspy 定义类型
- AJAX-(1)简介
- idea内置数据库如何查看表注释
- jQuery中如何判断checkbox是否被选中
- Spark之核心---RDDs(2)
- Android 实用hellocharts实现柱状图、线状图
- 关于流 fstream
- Java攻城狮面试题(-)
- Android-25种开源炫酷动画框架
- HDU 5835 Danganronpa
- RDC容器构建和部署服务新功能上线
- Hibernate Validator 方法界别验证,通过AOP实现,Unable to initialize 'javax.el.ExpressionFactory'.
- Codeforces Round #428 (Div. 2):D. Winter is here(组合数公式) +容斥