spark 系列之一 RDD的使用
spark中常用的两种数据类型,一个是RDD,一个是DataFrame,本篇主要介绍RDD的一些应用场景见代码
本代码的应用场景是在spark本地调试(windows环境)
/**
* 创建 sparkSession对象
*/
val sparkSession = SparkSession.builder()
.appName("TextFile")
.master("local")
.getOrCreate()
word.txt 的文本内容如下

wordcount:三个算子搞定 flatMap 是把数据打平,map是对打平的数据每个计数一,reduceBykey是按照key进行分类汇总。
/**
* wordCount 程序,三个算子搞定
*/
val peopleRDD1 = sparkSession.sparkContext
.textFile("file:///D:/software_download/spark_text/word.txt")
.flatMap(line=>line.split(" "))
.map(word=>(word,1))
.reduceByKey((a,b)=>a+b) peopleRDD1.foreach(println)
Result:
(scala,1)
(faster,1)
(is,1)
(spark,2)
(hadoop,1)
(love,6)
(i,6)
(python,1)
(nodejs,1)
(java,1)
按照key进行分组
/**
* 分组
*/
val peopleRDD2 = sparkSession.sparkContext
.textFile("file:///D:/software_download/spark_text/word.txt")
.flatMap(line=>line.split(" "))
.map(word=>(word,1))
.groupByKey()
peopleRDD2.foreach(println)
Result:
(scala,CompactBuffer(1))
(spark,CompactBuffer(1, 1))
(is,CompactBuffer(1))
(faster,CompactBuffer(1))
(hadoop,CompactBuffer(1))
(love,CompactBuffer(1, 1, 1, 1, 1, 1))
(i,CompactBuffer(1, 1, 1, 1, 1, 1))
(python,CompactBuffer(1))
(nodejs,CompactBuffer(1))
(java,CompactBuffer(1))
遍历RDD的keys和values,RDD中存放的是一个个对象,这点跟DataFrame不同,RDD中的对象对外的表现是黑盒的,即你不知道RDD中具体的字段是什么。DataFrame则不同,你可以清晰的看到DataFrame中所存放对象的内部结构。
/**
* RDD keys与values的遍历
*/ peopleRDD1.keys.foreach(println)
peopleRDD1.values.foreach(println)
Result:
scala
faster
is
spark
hadoop
love
i
python
nodejs
java
1
1
1
2
1
6
6
1
1
1
RDD 的其它操作,
/**
* 只针对value的值进行操作,以下两种操作等效,都是对key值加1操作
*/
peopleRDD1.sortByKey().map(x=>(x._1,x._2+1)).foreach(println)
peopleRDD1.sortByKey().mapValues(x=>x+1).foreach(println)
//按照value值进行排序
peopleRDD1.sortBy(x=>x._2,ascending = true).foreach(println)
//按照key值进行排序
peopleRDD1.sortByKey(ascending = true).foreach(println)
/**
* RDD之间的join操作
*/
val pairRDD1 = sparkSession.sparkContext.parallelize(Array(("spark",1),("spark",2),("hadoop",3),("hadoop",5)))
val pairRDD2 = sparkSession.sparkContext.parallelize(Array(("spark","fast")))
val RDD1_join_RDD2 = pairRDD1.join(pairRDD2)
RDD1_join_RDD2.foreach(println)
思考题: 求该rdd,按照key进行分组后,value值得平均值,答案如下。
求:写代码
val rdd = sparkSession.sparkContext.parallelize(Array(("spark",2),("hadoop",6),("hadoop",4),("spark",6)))
Result:
(spark,4)
(hadoop,5)
spark 系列之一 RDD的使用的更多相关文章
- Spark RDD概念学习系列之RDD的checkpoint(九)
RDD的检查点 首先,要清楚.为什么spark要引入检查点机制?引入RDD的检查点? 答:如果缓存丢失了,则需要重新计算.如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容 ...
- Spark RDD概念学习系列之RDD的缓存(八)
RDD的缓存 RDD的缓存和RDD的checkpoint的区别 缓存是在计算结束后,直接将计算结果通过用户定义的存储级别(存储级别定义了缓存存储的介质,现在支持内存.本地文件系统和Tachyon) ...
- Spark RDD概念学习系列之RDD的5大特点(五)
RDD的5大特点 1)有一个分片列表,就是能被切分,和Hadoop一样,能够切分的数据才能并行计算. 一组分片(partition),即数据集的基本组成单位,对于RDD来说,每个分片都会被一个计 ...
- Spark RDD概念学习系列之rdd的依赖关系彻底解密(十九)
本期内容: 1.RDD依赖关系的本质内幕 2.依赖关系下的数据流视图 3.经典的RDD依赖关系解析 4.RDD依赖关系源码内幕 1.RDD依赖关系的本质内幕 由于RDD是粗粒度的操作数据集,每个Tra ...
- Spark系列-核心概念
Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...
- Spark深入之RDD
目录 Part III. Low-Level APIs Resilient Distributed Datasets (RDDs) 1.介绍 2.RDD代码 3.KV RDD 4.RDD Join A ...
- Spark系列之二——一个高效的分布式计算系统
1.什么是Spark? Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有H ...
- Spark计算模型-RDD介绍
在Spark集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed DataSet,RDD),它是逻辑集中的实体,在集群中的多台集群上进行数据分区.通 ...
- spark 中的RDD编程 -以下基于Java api
1.RDD介绍: RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...
随机推荐
- C语言讲义——字符串库函数
字符串库函数<string.h> 求字符串长度(不含结束符'\0'****) strlen(str) 字符串赋值(可能造成数组越界) strcpy(str," 水浒传 " ...
- Java基础教程——解析注解
解析注解 Java 5开始,java.lang.reflect包下的反射API可以在运行时读取Annotation. 应用:定义一个自动执行方法的注解,解析注解.通过反射执行方法,替代配置文件. pa ...
- Java基础教程——泛型
泛型 Generics:泛型,愿意指"无商标的". 泛型,可以理解为"宽泛的数据类型",就是将类型由原来的具体的类型泛化. 泛型在建立对象时不指定类中属性的具体 ...
- 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?
作者 | 硬核云顶宫 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 上周,蚂蚁集团迎来IPO,其发行价格将达到68.8元,总市值将突破2万亿元.市场对蚂蚁的成长性有着充分的信心,为了 ...
- Spring事务传播级别
项目中用的默认值: 具体的,转载:https://segmentfault.com/a/1190000013341344 注: DataSourceTransactionManager只支持单数据源
- 第7.8节 Python中隐秘的类封装方法
前面章节已经介绍了Python中的多态和继承,本节将介绍面向对象程序设计OOP三大特征的另一个特征--封装. 一. 概念 封装是将对象的状态信息(也就是数据.属性)隐藏在对象内部,将对象的属性和 ...
- PyQt(Python+Qt)学习随笔:formLayout的layoutFormAlignment 属性
一.引言 Qt Designer的表单布局(formLayout)中,layoutFormAlignment 用于控制表单布局中所有子部件在布局框内的对齐方式(与layoutLabelAlignmen ...
- js2py 的用法
python调用js的方法 js2py的简单用法 import js2py js = """ function add(a, b) { return a + b } &q ...
- 【开发工具】 使用 Postman 进行接口测试 (配置全局 token,JWT可用)
在前后端分离开发的项目中,使用postman来做接口测试会方便很多,然而因为JWT的鉴权,导致每半小时token都要更新一下,使测试变的很麻烦. 如果把token设置为全局变量,方便做测试,每次自动获 ...
- 操作系统精髓与设计原理(九)——I/O管理和磁盘调度
文章目录 I/O设备 I/O功能组织 直接存储器访问 操作系统设计问题 设计目标 IO功能的逻辑结构 I/O缓冲 单缓冲 双缓冲 循环缓冲 缓冲的作用 磁盘调度 磁盘性能参数 磁盘调度策略 先进先出 ...