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上如果要安装数据库 ...
随机推荐
- 使用vue构建一个可视化大数据平台
使用vue全家桶以及v-charts和datav实现一个github可视化大数据界面展示,没有设计搞的原因,只能忽略设计编写一下界面, 用户只需要登录的时候填写自己github用户名.就可以看到数据展 ...
- java-选中排序(新手)
//排序 选择排序 数组中每个元素都进行比较public class Test { //公共静态的主方法. public static void main(String[] args) { //创建一 ...
- php 调用curl_init失败
当你在开发微信公众号,微信小程序的时候,往往会遇到困难 进入服务器,输入 tail -f /var/log/apache2/error.log 看看apache2的日志 就因为php 的curl扩展没 ...
- Jenkins分布式构建与并行构建
Jenkins分布式构建与并行构建 jenkins的架构 Jenkins采用的是"master+agent(slave)"架构.Jenkins master负责提供界面.处理HTT ...
- Analysis of endogenous peptides released from osteoarthritic cartilage unravels novel pathogenic markers (解读人:李琼)
文献名:Analysis of endogenous peptides released from osteoarthritic cartilage unravels novel pathogenic ...
- Jsp el表达式无解析 解决
需要开启 el isELIgnored="false" 这时已经可以正常访问了
- 基于Docker搭建Nginx图片服务器
前言 一般开发中,都会把图片上传到一个目录,然后将目录和文件名拼接存储在数据库中,但是,这种方法如果没弄好的话可能有一定的缺陷. 若项目搬迁,即时这台服务器本身还在用,存放在服务器的跟项目相关的图片也 ...
- SpringCloud系列之服务注册发现(Eureka)应用篇
@ 目录 前言 项目版本 Eureka服务端 Eureka客户端 服务访问 前言 大家好,距离上周发布的配置中心基础使用已过去差不多一周啦,趁着周末继续完善后续SpringCloud组件的集成,本次代 ...
- H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet
H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet 设备H3CMSR830-6BHI-WiNet 先输入dis dhcp server tree pool 查看地址池名称,然后 < ...
- vue cli3配置开发环境、测试环境、生产(线上)环境
cli3创建vue项目是精简版的少了build和config这2个文件,所以配置开发环境.测试环境.生产环境的话需要自己创建env文件. 需要注意2点: 1.cli2创建项目生成的config文件里的 ...