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的使用的更多相关文章

  1. Spark RDD概念学习系列之RDD的checkpoint(九)

     RDD的检查点 首先,要清楚.为什么spark要引入检查点机制?引入RDD的检查点?  答:如果缓存丢失了,则需要重新计算.如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容 ...

  2. Spark RDD概念学习系列之RDD的缓存(八)

      RDD的缓存 RDD的缓存和RDD的checkpoint的区别 缓存是在计算结束后,直接将计算结果通过用户定义的存储级别(存储级别定义了缓存存储的介质,现在支持内存.本地文件系统和Tachyon) ...

  3. Spark RDD概念学习系列之RDD的5大特点(五)

      RDD的5大特点  1)有一个分片列表,就是能被切分,和Hadoop一样,能够切分的数据才能并行计算. 一组分片(partition),即数据集的基本组成单位,对于RDD来说,每个分片都会被一个计 ...

  4. Spark RDD概念学习系列之rdd的依赖关系彻底解密(十九)

    本期内容: 1.RDD依赖关系的本质内幕 2.依赖关系下的数据流视图 3.经典的RDD依赖关系解析 4.RDD依赖关系源码内幕 1.RDD依赖关系的本质内幕 由于RDD是粗粒度的操作数据集,每个Tra ...

  5. Spark系列-核心概念

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...

  6. Spark深入之RDD

    目录 Part III. Low-Level APIs Resilient Distributed Datasets (RDDs) 1.介绍 2.RDD代码 3.KV RDD 4.RDD Join A ...

  7. Spark系列之二——一个高效的分布式计算系统

    1.什么是Spark? Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有H ...

  8. Spark计算模型-RDD介绍

    在Spark集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed DataSet,RDD),它是逻辑集中的实体,在集群中的多台集群上进行数据分区.通 ...

  9. spark 中的RDD编程 -以下基于Java api

    1.RDD介绍:     RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...

随机推荐

  1. P1633 二进制

    首先将 \(A,B,C\) 二进制中 \(1\) 的个数和最大长度 \(L\) 算出来. 接着考虑二进制位相加的情况: 低位不进上来. \(X\) 和 \(Y\) 中的两个 \(1\) 合成 \(Z\ ...

  2. Java蓝桥杯01——第一题集锦:堆煤球、购物单、哪天返回、第几天、分数

    堆煤球(2016JavaB) 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100 ...

  3. 有了Git这个操作,我再也不怕代码混乱了!

    大家好,今天的文章我们来介绍git当中一个非常常用的功能--储藏. 大家在协同开发的时候应该都有这样的经历,有的时候我们的功能开发了一半,因为某些原因我们想要checkout到其他的分支上查看代码或者 ...

  4. Android多触点总结

    文章部分内容参考: http://blog.csdn.net/barryhappy/article/details/7392326 总结: 1. event.getX()可以得到x的坐标,里面的参数0 ...

  5. 创建实验楼课程app模块以及配置图片路径

    1.创建course模型 1.1 创建用户模型course python ../manage.py startapp course # 创建course模型 1.2 在setting.py中注册cou ...

  6. 【2020.12.02提高组模拟】球员(player)

    题目 题目描述 老师们已经知道学生喜欢睡觉,Soaring是这项记录保持者.他只会在吃饭或玩FIFA20时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...

  7. 20200523_mysql中文乱码

    查看字符集: 方法一:show variables like '%character%'; 方法二:show variables like 'collation%';设置字符集: /*建立连接使用的编 ...

  8. day4(编写注册接口)

    1.编写注册接口 1.1 user/urls.py中添加路由 urlpatterns = [    path('register/', views.RegisterView.as_view()),  ...

  9. 《MySQL慢查询优化》之SQL语句及索引优化

    1.慢查询优化方式 服务器硬件升级优化 Mysql服务器软件优化 数据库表结构优化 SQL语句及索引优化 本文重点关注于SQL语句及索引优化,关于其他优化方式以及索引原理等,请关注本人<MySQ ...

  10. 最常用的分布式ID解决方案,你知道几个

    一.分布式ID概念 说起ID,特性就是唯一,在人的世界里,ID就是身份证,是每个人的唯一的身份标识.在复杂的分布式系统中,往往也需要对大量的数据和消息进行唯一标识.举个例子,数据库的ID字段在单体的情 ...