1.原始数据 Key value Transformations(example: ((1, 2), (3, 4), (3, 6)))

 2. flatMap测试示例

object FlatMapTran {

  //与map相似,区别是源rdd中的元素经map处理后只能生成一个元素,而原有的rdd中的元素经过flatmap处理后可以生成多个元素
def main(args: Array[String]) { val spark = SparkSession.builder().appName("FlatMapTran").master("local[1]").getOrCreate()
val sc = spark.sparkContext; val lines = sc.parallelize(Array("hi shao", "scala test", "good", "every"))
lines.foreach(println) val line2 = lines.map(line => line.split(" "))
line2.foreach(println) val line3 = lines.map(line => (line,1))
line3.foreach(println) val line4=lines.flatMap(line => line.split(" "))
line4.foreach(println)
}
}

 执行结果: 

hi shao
scala test
good
every
[Ljava.lang.String;@129af42
[Ljava.lang.String;@1c9136
[Ljava.lang.String;@1927273
[Ljava.lang.String;@3b9611
(hi shao,1)
(scala test,1)
(good,1)
(every,1)
hi
shao
scala
test
good
every

3.distinct、reducebykey、groupbykey

object RddDistinct {

  def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("FlatMapTran").master("local[1]").getOrCreate()
val sc = spark.sparkContext //val datas=sc.parallelize(List(("g","23"),(1,"shao"),("haha","23"),("g","23")))
val datas=sc.parallelize(Array(("g","23"),(1,"shao"),("haha","23"),("g","23")))
datas.distinct().foreach(println(_))
/**结果:
* (haha,23)
(1,shao)
(g,23)
*/ datas.reduceByKey((x,y)=>x+y).foreach(println)
/**结果:
* (haha,23)
(1,shao)
(g,2323)
*/ datas.groupByKey().foreach(println(_))
/**结果:
* (haha,CompactBuffer(23))
(1,CompactBuffer(shao))
(g,CompactBuffer(23, 23))
*
*/
} }

4.combineByKey(create Combiner, merge Value, merge Combiners, partitioner)

最常用的基于key的聚合函数,返回的类型可以与输入类型不一样许多基于key的聚合函数都用到了它,像 groupbykey0

遍历 partition中的元素,元素的key,要么之前见过的,要么不是。如果是新元素,使用我们提供的 createcombiner()函数如果是这个partition中已经存在的key,

就会使用 mergevalue()函数合计每个 partition的结果的时候,使用 merge Combiners()函数

object CombineByKeyTest {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder().appName("FlatMapTran").master("local[1]").getOrCreate()
val sc = spark.sparkContext val scores=sc.parallelize(Array(("jack",99.0),("jack",80.0),("jack",85.0),("jack",89.0),("lily",95.0),("lily",87.0),("lily",87.0),("lily",77.0))) //combineByKey(create Combiner, mergevalue, merge Combiners, partitioner)
//(创建合并器、合并值、合并合并合并器、分区器)
val scores2=scores.combineByKey(score=>(,score),
(c1:(Int,Double),newScore)=>(c1._1+,c1._2+newScore),
(c1:(Int,Double),c2:(Int,Double))=>(c1._1+c2._1,c1._2+c2._2))
/**
* 结果:
* (lily,(4,346.0))
(jack,(4,353.0))
*/ scores2.foreach(println(_))
scores2.map(score=>{
(score._1,score._2,score._2._2/score._2._1)
}).foreach(println(_))
/**
* 结果:
* (lily,(4,346.0),86.5)
(jack,(4,353.0),88.25)
*/ scores2.map{case (name,(num,totalScore))=>{
(name,num,totalScore,totalScore/num)
}}.foreach(println(_))
/**
* 结果:
* (lily,4,346.0,86.5)
(jack,4,353.0,88.25)
*/ } }

  

rdd简单操作的更多相关文章

  1. spark RDD 常见操作

    fold 操作 区别 与 co 1.mapValus 2.flatMapValues 3.comineByKey 4.foldByKey 5.reduceByKey 6.groupByKey 7.so ...

  2. spark sql的简单操作

    测试数据 sparkStu.text zhangxs chenxy wangYr teacher wangx teacher sparksql { ,"job":"che ...

  3. spark入门(二)RDD基础操作

    1 简述 spark中的RDD是一个分布式的元素集合. 在spark中,对数据的所有操作不外乎创建RDD,转化RDD以及调用RDD操作进行求值,而这些操作,spark会自动将RDD中的数据分发到集群上 ...

  4. x01.MagicCube: 简单操作

    看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...

  5. js简单操作Cookie

    贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...

  6. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

  7. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

  8. Linux 中 Vi 编辑器的简单操作

    Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi  filename //打开或新 ...

  9. python(pymysql)之mysql简单操作

    一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...

随机推荐

  1. JMeter脚本拷贝自动化

    方法一:DOC命令拷贝脚本(适合Windows系统) 1.写一段DOC命令(保存为批处理文件copyscript.bat),将本地JMeter脚本拷贝到远程机器上. net use \\<远程机 ...

  2. Linux软件安装之JDK的安装

    JDK的安装 1.1. 下载JDK,此处版本是1.8u131,实际操作以自己具体版本为准 先查看Linux系统是多少位(32位/64位):getconf LONG_BIT 然后去官网下载JDK [jd ...

  3. IE 跨域session丢失问题

    在测试时发现session 取不到值,以为是session赋值除了问题,但是在Chrome中一切正常,故排除此原因.那问题肯定出在浏览器身上里.于是一步一步调试,发现在IE中,如果页面跳转,Sessi ...

  4. win10 Redis闪退问题

    问题:双击redis-server.exe,闪退 解决办法:win+R,输入cmd进入命令行模式,接着cd进入Redis安装根目录,再输入:redis-server.exe redis.windows ...

  5. GANs和低效映射

    生成对抗网络(GANs)被誉为生成艺术领域的下一纪元,这是有充分理由的.新技术一直是艺术的驱动因素,从颜料的发明到照相机再到Photoshop-GAN是自然而然的.例如,考虑下面的图片,由埃尔加马勒发 ...

  6. 使用Python+OpenCV进行图像处理(二)| 视觉入门

    [前言]图像预处理对于整个图像处理任务来讲特别重要.如果我们没有进行恰当的预处理,无论我们有多么好的数据也很难得到理想的结果. 本篇是视觉入门系列教程的第二篇.整个视觉入门系列内容如下: 理解颜色模型 ...

  7. Python第七章-面向对象

    面向对象编程基础 一.面向对象概念 1.1 什么是面向过程 ​ 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ​ 生活中的的例子举例. 1.2 ...

  8. 区间dp暂时的理解

    因为刚刚看了区间dp,所以写一下对区间dp的理解. 例题: 石子归并 51Nod - 1021 看了一篇博客,觉得他说得比较容易理解,所以再次重复一遍: 假如你是上帝,已经知道了1~n堆石子的最优解, ...

  9. 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)

    一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...

  10. Fedora20在神州战神K650D1安装过程,使用netinstall和Dvd.iso镜像安装。

    最近新买一笔记本,神州战神K650D-i5 D1.仍旧安装双系统,WIndows7+Fedora20.磁盘分区是这样的: 第一主分区 /boot ext4 20G 第二主分区 / ext4 70G 第 ...