Spark算子代码实践
Spark
一.coalesce
1.简介
coalesce常用来合并分区,第二个参数是合并分区时是否产生shuffle。true为产生shuffle,false为不产生shuffle。默认是false不产生shuffle。如果coalesce设置的分区数比原来的分区数还大的话若设置为false则不起作用。如果设置为true则效果等价于repartition。即repartition(numPartitions) = coalesce(numPartitions)。
2.测试数据
val array = Array("spark,scala,6", "hadoop,java,12", "tensorflow,python,8", "solr,java,16", "hbase,java,11")
3.代码
/**
* coalesce算子,常用于减少分区
*/
val befParNum = rdd.getNumPartitions
rdd = rdd.coalesce(1, false) // true为产生shuffle
val coalParNum = rdd.getNumPartitions
/**
* repartition与之类型,一般增大分区数
*/
rdd = rdd.repartition(3)
val reParNum = rdd.getNumPartitions
println("初始分区数:" + befParNum + ",coalesce分区后:" + coalParNum + ",repartition分区后:" + reParNum)
4.结果
初始分区数:2,coalesce分区后:1,repartition分区后:3
二.zip,zipWithIndex
1.简介
zip将两个RDD中的元素变成一个KV格式的RDD,两个RDD的每个分区元素个数必须相同。zipWithIndex该函数将RDD中的元素和这个元素在RDD中的索引下标【从0开始】组合成【K,V】键值对。
2.测试数据
val zip_array_left = Array(1,2,5,6,7,5,3,1)
val zip_array_left_2 = Array(1,2,5,6,7,8,9,0)
val zip_array_right = Array("spark", "scala", "hive", "hbase", "python", "hive", "hbase", "hbase")
3.代码
/**
* zip
*/
//to rdd
val zip_left = sc.parallelize(zip_array_left)
val zip_left_2 = sc.parallelize(zip_array_left_2)
val zip_right = sc.parallelize(zip_array_right) //zip
val zip = zip_left.zip(zip_right)
zip.foreach(println)
println("------------------") val zip_2 = zip_left_2.zip(zip_right)
/**
* zipWithIndex
*/
val zip_index = zip.zipWithIndex()
zip_index.foreach(println)
4.结果
(1,spark)
(2,scala)
(5,hive)
(6,hbase)
(7,python)
(5,hive)
(3,hbase)
(1,hbase)
------------------
((1,spark),0)
((7,python),4)
((2,scala),1)
((5,hive),2)
((5,hive),5)
((6,hbase),3)
((3,hbase),6)
((1,hbase),7)
三.countByKey,countByValue
1.简介
countByKey作用在K,V格式的RDD之上,统计相同key的个数。countByValue作用在K,V格式的RDD之上,统计相同value的个数。
2.测试数据
同上
3.代码
/**
* countByKey
*/
val zip_key = zip.countByKey()
zip_key.foreach(println)
println("------------------")
/**
* countByValue
*/
val zip_value = zip.countByValue()
zip_value.foreach(println)
4.结果
(5,2)
(1,2)
(6,1)
(2,1)
(7,1)
(3,1)
------------------
((7,python),1)
((1,spark),1)
((2,scala),1)
((1,hbase),1)
((3,hbase),1)
((6,hbase),1)
((5,hive),2)
四.cogroup
1.简介
cogroup 对两个内部数据结构为元组(仅有两个元素的元组)的数据进行匹配,把匹配上的value值保存到一个元组中。
2.测试数据
同上
3.代码
zip.cogroup(zip_2).foreach(println)
4.结果
(0,(CompactBuffer(),CompactBuffer(hbase)))
(1,(CompactBuffer(spark, hbase),CompactBuffer(spark)))
(7,(CompactBuffer(python),CompactBuffer(python)))
(3,(CompactBuffer(hbase),CompactBuffer()))
(6,(CompactBuffer(hbase),CompactBuffer(hbase)))
(9,(CompactBuffer(),CompactBuffer(hbase)))
(8,(CompactBuffer(),CompactBuffer(hive)))
(5,(CompactBuffer(hive, hive),CompactBuffer(hive)))
(2,(CompactBuffer(scala),CompactBuffer(scala)))
五.flatten
1.简介
把多层集合数据展开成一个集合。
2.测试数据
val sourceDate = Array("zhen@zhen01/2018-09-04_18;57;02_SOURCE",
"zhen@zhen02/2018-09-05_11;37;11_SOURCE","zhen@zhen03/2018-09-06_11;37;11_TEST")
val resultDate = Array("zhen@zhen01/2018-09-04_18;57","zhen@zhen02/2018-09-05_11;37",
"zhen@zhen03/2018-09-06_11;37")
3.代码
val seq = Seq(sourceDate, resultDate)
seq.flatten.foreach(println)
4.结果
zhen@zhen01/2018-09-04_18;57;02_SOURCE
zhen@zhen02/2018-09-05_11;37;11_SOURCE
zhen@zhen03/2018-09-06_11;37;11_TEST
zhen@zhen01/2018-09-04_18;57
zhen@zhen02/2018-09-05_11;37
zhen@zhen03/2018-09-06_11;37
Spark算子代码实践的更多相关文章
- UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现
UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import ...
- UserView--第一种方式set去重,基于Spark算子的java代码实现
UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...
- Spark—RDD编程常用转换算子代码实例
Spark-RDD编程常用转换算子代码实例 Spark rdd 常用 Transformation 实例: 1.def map[U: ClassTag](f: T => U): RDD[U] ...
- 【Spark算子】:reduceByKey、groupByKey和combineByKey
在spark中,reduceByKey.groupByKey和combineByKey这三种算子用的较多,结合使用过程中的体会简单总结: 我的代码实践:https://github.com/wwcom ...
- 我的Spark SQL单元测试实践
最近加入一个Spark项目,作为临时的开发人员协助进行开发工作.该项目中不存在测试的概念,开发人员按需求进行编码工作后,直接向生产系统部署,再由需求的提出者在生产系统检验程序运行结果的正确性.在这种原 ...
- Spark算子---实战应用
Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...
- ReactiveCocoa代码实践之-更多思考
三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACOb ...
- ReactiveCocoa代码实践之-RAC网络请求重构
前言 RAC相比以往的开发模式主要有以下优点:提供了统一的消息传递机制:提供了多种奇妙且高效的信号操作方法:配合MVVM设计模式和RAC宏绑定减少多端依赖. RAC的理论知识非常深厚,包含有FRP,高 ...
- (转)Spark 算子系列文章
http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...
随机推荐
- mysql 开发基础系列17 存储过程和函数(上)
一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...
- Android--数据持久化之SQLite
前言 对于一个应用程序而言,数据持久化是必不可少的,Android程序也不例外.这篇博客将介绍Android中关于SQLite的使用,SQLite是一种嵌入式的数据库引擎,专门适用于资源有限的设备上进 ...
- JVM学习(一)、垃圾收集器简介
一.垃圾收集算法 (1)标记-清除算法:最基础的收集算法“标记--清除”(Mark-sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的 ...
- 【EF6学习笔记】(十一)实施继承
上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里,继承可以很好的重用代码.在本章就对Instructor和Student两个类进 ...
- mycat 从入门到放弃 (转)
http://blog.csdn.net/u013235478/article/details/53178657 1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的.例如下 ...
- Spring Boot 系列(七)Swagger2-生成RESTful接口文档
Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服 ...
- shiro 返回json字符串 + 自定义filter
前言: 在前后端分离的项目中, 在使用shiro的时候, 我们绝大部分时候, 并不想让浏览器跳转到那个页面去, 而是告诉前端, 你没有登录, 或者没有访问权限. 那这时候, 我们就需要返回json字符 ...
- 【Go】获取用户真实的ip地址
原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html 用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip ...
- 第3章 Linux上文件的权限管理
3.1 文件/目录的权限 3.1.1 文件的权限 每个文件都有其所有者(u:user).所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者.权限包括读(r:r ...
- perl选项、特殊变量、一些函数参考手册
perl一行式程序系列文章:Perl一行式 本文用来收集Perl一行式中涉及到的一些选项.特殊变量的说明,可以用来做速查手册. 本文会逐渐更新. 第一次学Perl一行式时,请直接忽略本文内容,并直接从 ...