rdd简单操作
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简单操作的更多相关文章
- spark RDD 常见操作
		
fold 操作 区别 与 co 1.mapValus 2.flatMapValues 3.comineByKey 4.foldByKey 5.reduceByKey 6.groupByKey 7.so ...
 - spark sql的简单操作
		
测试数据 sparkStu.text zhangxs chenxy wangYr teacher wangx teacher sparksql { ,"job":"che ...
 - spark入门(二)RDD基础操作
		
1 简述 spark中的RDD是一个分布式的元素集合. 在spark中,对数据的所有操作不外乎创建RDD,转化RDD以及调用RDD操作进行求值,而这些操作,spark会自动将RDD中的数据分发到集群上 ...
 - x01.MagicCube: 简单操作
		
看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...
 - js简单操作Cookie
		
贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...
 - GitHub学习心得之 简单操作
		
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...
 - Linq对XML的简单操作
		
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
 - Linux 中 Vi 编辑器的简单操作
		
Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi filename //打开或新 ...
 - python(pymysql)之mysql简单操作
		
一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...
 
随机推荐
- JavaSE知识概述集
			
一.HelloWord(文档启动Java) /* 使用命令行的方式执行的时候,cmd的默认编码格式是GBK 因此在输入中文的时候需要设置文件的编码格式位ANSI,不会出现乱码错误 注意: 0.先用ja ...
 - Java 并发容器(转)
			
转自:https://blog.ouyangsihai.cn/%2Fjava-gao-bing-fa-zhi-bing-fa-rong-qi-xiang-jie-cong-ru-men-dao-cha ...
 - JVM 参数(转)
			
Herry灬凌夜 转自:https://www.cnblogs.com/wuyx/p/9627542.html 常用的JVM配置参数 一.Trace 跟踪参数 在Eclipse中,如何打开GC的监控 ...
 - github的上面的安全工具
			
简介 Scanners Box也被称为 scanbox,是一个强大完备的黑客工具箱,它收集了Github上数10种类别的开源扫描器,包括子域名,数据库,中间件和其他模块化设计的扫描器等,但对于一些被大 ...
 - matplotlib 中的一些参数设置
			
首先:在pycharm 中要使图显示出来,最后一定要加上 plt.show(),如: plt.bar(x, y) plt.show() 下面就是我使用 matplotlib 遇到的一些常用参数设置: ...
 - 洛谷1363 幻象迷宫dfs
			
题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远.解决方案是dfs,走出初始地图之后的位置映射到原位置( ...
 - Java基础语法(7)-数组
			
title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...
 - Building Applications with Force.com and VisualForce(Dev401)(十一):Designing Applications for Multiple Users: Proseving Data Quality
			
Dev401-012:Proseving Data Quality Universal Containers Scenario1.Universal Containers(UC) wants to e ...
 - OpenCV-Python 绘图功能 | 七
			
目标 学习使用OpenCV绘制不同的几何形状 您将学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 代码 ...
 - 关于 JavaScript 的 精度丢失 与 近似舍入
			
一.背景 最近做 dashborad 图表时,涉及计算小数且四舍五入精确到 N 位.后发现 js 算出来的结果跟我预想的不一样,看来这里面并不简单-- 二.JS 与 精度 1.精度处理 首先明确两点: ...