spark学习(RDD案例实战)
练习0(并行化创建RDD)
先启动spark-shell
通过并行化生成rdd
scala> val rdd1 = sc.parallelize(List(63,45,89,23,144,777,888))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:15
查看该RDD的分区数量
scala> rdd1.partitions.length
res0: Int = 1
创建时指定分区数量
scala> val rdd1 = sc.parallelize(List(63,45,89,23,144,777,888),3)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:15
查看分区数量
scala> rdd1.partitions.length
res1: Int = 3
练习1(map,filter)
对rdd1里的每个元素乘以2,然后排序
scala> val rdd1 = sc.parallelize(List(1,2,100,3,4))
scala> val rdd2 = rdd1.map(x => x*2).collect
rdd2: Array[Int] = Array(2, 4, 200, 6, 8)
scala> val rdd3 = rdd1.map(_*2).sortBy(x =>x,true).collect
rdd3: Array[Int] = Array(2, 4, 6, 8, 200)
过滤出大于等于50的元素
scala> val rdd1 = sc.parallelize(List(1,2,100,3,4))
scala> val rdd2 = rdd1.filter(_>50).collect
rdd2: Array[Int] = Array(100)
scala> val rdd2 = rdd1.filter(x => x>50).collect
rdd2: Array[Int] = Array(100)
过滤出偶数
scala> val rdd2 = rdd1.filter(_%2==0).collect
rdd2: Array[Int] = Array(2, 100, 4)
练习2(map和flatMap)
scala> val rdd1 = sc.parallelize(Array("w u","j i a","d o n g"))
按空格分隔
scala> rdd1.map(_.split(" ")).collect
res28: Array[Array[String]] = Array(Array(w, u), Array(j, i, a), Array(d, o, n, g))
分隔并压平
scala> val rdd2 = rdd1.flatMap(_.split(" "))
scala> rdd2.collect
res5: Array[String] = Array(w, u, j, i, a, d, o, n, g)
scala> val rdd1 = sc.parallelize(List(List("w u","j i a","d o n g"),List("j i a n g","r u i")))
scala> val rdd2 = rdd1.map(_.map(_.split(" "))).collect
rdd2: Array[List[Array[String]]] = Array(List(Array(w, u), Array(j, i, a), Array(d, o, n, g)), List(Array(j, i, a, n, g), Array(r, u, i)))
scala> val rdd2 = rdd1.map(_.flatMap(_.split(" "))).collect
rdd2: Array[List[String]] = Array(List(w, u, j, i, a, d, o, n, g), List(j, i, a, n, g, r, u, i))
scala> val rdd2 = rdd1.flatMap(_.flatMap(_.split(" "))).collect
rdd2: Array[String] = Array(w, u, j, i, a, d, o, n, g, j, i, a, n, g, r, u, i)
练习3(union,intersecttion,distinct)
scala> val rdd1 = sc.parallelize(List(1,2,3,4))
scala> val rdd2 = sc.parallelize(List(5,6,4,3))
求并集
scala> val rdd3 = rdd1.union(rdd2)
rdd3: Array[Int] = Array(1, 2, 3, 4, 5, 6, 4, 3)
求交集
scala> val rdd4 = rdd1.intersection(rdd2).collect
rdd4: Array[Int] = Array(4, 3)
去重
scala> val rdd5 = rdd3.distinct
rdd5: Array[Int] = Array(1, 2, 3, 4, 5, 6)
练习4(sortBy)
对rdd1里的每个元素乘以2,然后排序
scala> val rdd1 = sc.parallelize(List(1,2,100,3,4))
scala> val rdd2 = rdd1.map(_*2).sortBy(x => x,true)//为什么sortBy里面用下划线不行?
scala> rdd2.collect
res21: Array[Int] = Array(2, 4, 6, 8, 200)
注意区别一下两种情况
scala> rdd1.sortBy(x=>x+"",true).collect
res22: Array[Int] = Array(1, 100, 2, 3, 4)
scala> rdd1.sortBy(x=>"x",true).collect
res23: Array[Int] = Array(1, 2, 100, 3, 4)
转换成字符串排序
scala> val rdd2 = rdd1.sortBy(x=>x+"",true).collect
rdd2: Array[Int] = Array(144, 23, 45, 63, 777, 888, 89)
scala> val rdd2 = rdd1.sortBy(x=>x.toString,true).collect//或者sortBu(_.toString,true)
rdd2: Array[Int] = Array(144, 23, 45, 63, 777, 888, 89)
练习5(groupByKey,reduceByKey,sortByKey)
scala> val rdd1 = sc.parallelize(Array(("class1",50),("class2",80),("class2",70),("class1",90)))
rdd1: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[29] at parallelize at <console>:15
scala> val rdd2 = rdd1.groupByKey()
rdd2: org.apache.spark.rdd.RDD[(String, Iterable[Int])] = ShuffledRDD[30] at groupByKey at <console>:17
scala> val rdd2 = rdd1.groupByKey().collect
rdd2: Array[(String, Iterable[Int])] = Array((class1,CompactBuffer(50, 90)), (class2,CompactBuffer(80, 70)))
scala> rdd2.foreach(score => {println(score._1);score._2.foreach(singlescore => println(singlescore))})
class1
50
90
class2
80
70
scala> val rdd1 = sc.parallelize(Array(("class1",50),("class2",80),("class2",70),("class1",90)))
rdd1: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[32] at parallelize at <console>:15
scala> val rdd2 = rdd1.reduceByKey(_+_).collect
rdd2: Array[(String, Int)] = Array((class1,140), (class2,150))
scala> val rdd1 = sc.parallelize(List(("tom",1),("jerry",2),("kitty",3)))
scala> val rdd2 = sc.parallelize(List(("jerry",9),("tom",8),("shuke",7)))
scala> val rdd3 = rdd1.union(rdd2)
按key进行聚合
scala> val rdd4 = rdd3.reduceByKey(_+_)
scala> rdd4.collect
res23: Array[(String, Int)] = Array((tom,9), (jerry,11), (shuke,7), (kitty,3))
按value的降序排序
scala> val rdd5 = rdd4.map(t=>(t._2,t._1)).sortByKey(false).map(t=>(t._2,t._1))
scala> rdd5.collect
res24: Array[(String, Int)] = Array((jerry,11), (tom,9), (shuke,7), (kitty,3))
scala> val rdd1 = sc.parallelize(Array(("class1",50),("class2",80),("class2",70),("class1",90)))
rdd1: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[34] at parallelize at <console>:15
scala> val rdd2 = rdd1.sortByKey().collect
rdd2: Array[(String, Int)] = Array((class1,50), (class1,90), (class2,80), (class2,70))
scala> rdd2.foreach(score => println(score._1+":"+score._2))
class1:50
class1:90
class2:80
class2:70
练习6(join)
scala> val rdd1 = sc.parallelize(List(("tom",1),("jerry",2),("kitty",3)))
scala> val rdd2 = sc.parallelize(List(("jerry",9),("tom",8),("shuke",7)))
scala> val rdd3 = rdd1.join(rdd2).collect
rdd3: Array[(String, (Int, Int))] = Array((tom,(1,8)), (jerry,(2,9)))
scala> rdd2.join(rdd1).collect
res5: Array[(String, (Int, Int))] = Array((tom,(8,1)), (jerry,(9,2)))
scala> val rdd2 = sc.parallelize(List(("jerry",9),("tom",8),("shuke",7),("tom",2)))
scala> val rdd3 = rdd1.join(rdd2).collect
rdd3: Array[(String, (Int, Int))] = Array((tom,(1,8)), (tom,(1,2)), (jerry,(2,9)))
scala> val rdd3 = rdd1.leftOuterJoin(rdd2).collect
rdd3: Array[(String, (Int, Option[Int]))] = Array((tom,(1,Some(8))), (tom,(1,Some(2))), (jerry,(2,Some(9))), (kitty,(3,None)))
scala> val rdd3 = rdd1.rightOuterJoin(rdd2).collect
rdd3: Array[(String, (Option[Int], Int))] = Array((tom,(Some(1),8)), (tom,(Some(1),2)), (jerry,(Some(2),9)), (shuke,(None,7)))
scala> val rdd3 = rdd1.union(rdd2).collect
rdd3: Array[(String, Int)] = Array((tom,1), (jerry,2), (kitty,3), (jerry,9), (tom,8), (shuke,7), (tom,2))
scala> val rdd3 = rdd1.union(rdd2)
scala> val rdd4 = rdd3.groupByKey
scala> rdd4.collect
res11: Array[(String, Iterable[Int])] = Array((tom,CompactBuffer(1, 8, 2)), (jerry,CompactBuffer(2, 9)), (shuke,CompactBuffer(7)), (kitty,CompactBuffer(3)
求每个单词出现的次数
scala> val rdd5 = rdd3.groupByKey.map(x=>(x._1,x._2.sum))
scala> rdd5.collect
res12: Array[(String, Int)] = Array((tom,11), (jerry,11), (shuke,7), (kitty,3))
scala> rdd3.groupByKey.mapValues(_.sum).collect
res14: Array[(String, Int)] = Array((tom,11), (jerry,11), (shuke,7), (kitty,3))
练习7(reduce)
scala> val rdd1 = sc.parallelize(List(1,2,3,4,5),2)
scala> val rdd2 = rdd1.reduce(_+_)
rdd2: Int = 15
scala> rdd1.count
res15: Long = 5
排序后取最大2个
scala> rdd1.top(2)
res17: Array[Int] = Array(5, 4)
取前2个
scala> rdd1.take(2)
res18: Array[Int] = Array(1, 2)
取第1个元素
scala> rdd1.first
res20: Int = 1
scala> rdd1.takeOrdered(3)
res22: Array[Int] = Array(1, 2, 3)
练习8(cogroup)
scala> val rdd1 = sc.parallelize(Array((1,"a"),(2,"b"),(3,"c")))
scala> val rdd2 = sc.parallelize(Array((1,100),(2,97),(3,100)))
scala> val rdd3 = rdd1.cogroup(rdd2)
scala> rdd3.collect
res2: Array[(Int, (Iterable[String], Iterable[Int]))] = Array((1,(CompactBuffer(a),CompactBuffer(100))), (3,(CompactBuffer(c),CompactBuffer(100))), (2,(CompactBuffer(b),CompactBuffer(97))))
spark学习(RDD案例实战)的更多相关文章
- Spark Streaming updateStateByKey案例实战和内幕源码解密
本节课程主要分二个部分: 一.Spark Streaming updateStateByKey案例实战二.Spark Streaming updateStateByKey源码解密 第一部分: upda ...
- 【Todo】【转载】Spark学习 & 机器学习(实战部分)-监督学习、分类与回归
理论原理部分可以看这一篇:http://www.cnblogs.com/charlesblc/p/6109551.html 这里是实战部分.参考了 http://www.cnblogs.com/shi ...
- spark学习(五)总结及其demo
RDD及其特点 1.RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集. 2.RDD在抽象上来说是一种元素集合,包含 ...
- Spark学习总结
RDD及其特点 1.RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集. 2.RDD在抽象上来说是一种元素集合,包含 ...
- 大数据学习day20-----spark03-----RDD编程实战案例(1 计算订单分类成交金额,2 将订单信息关联分类信息,并将这些数据存入Hbase中,3 使用Spark读取日志文件,根据Ip地址,查询地址对应的位置信息
1 RDD编程实战案例一 数据样例 字段说明: 其中cid中1代表手机,2代表家具,3代表服装 1.1 计算订单分类成交金额 需求:在给定的订单数据,根据订单的分类ID进行聚合,然后管理订单分类名称, ...
- 《图解Spark:核心技术与案例实战》作者经验谈
1,看您有维护博客,还利用业余时间著书,在技术输出.自我提升以及本职工作的时间利用上您有没有什么心得和大家分享?(也可以包含一些您写书的小故事.)回答:在工作之余能够写博客.著书主要对技术的坚持和热爱 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- Spark Streaming 进阶与案例实战
Spark Streaming 进阶与案例实战 1.带状态的算子: UpdateStateByKey 2.实战:计算到目前位置累积出现的单词个数写入到MySql中 1.create table CRE ...
- spark 随机森林算法案例实战
随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数 ...
随机推荐
- 【原】eclipse使用技巧之代码编辑器分隔窗口
相信很多使用Intellj IDE的朋友对其split screen功能赞赏有加!其实在eclipse中也可以方便地代码编辑多windows.多views!但是隐藏的有点深,很多朋友不常用到,甚至以为 ...
- bootstrap 媒体查询
//各类设备的分辨率 /*超小设备(手机,小于768px)*/ /* Bootstrap 中默认情况下没有媒体查询 */ /*超小型设备(小于768px)*/ @media (min-width:@s ...
- Android 点击电话号码之间拨号
点击电话号码之间拨打电话,可用通过下面的方式实现: 假设电话号码以TextView的方式显示 1.Intent方式 在TextView的响应事件中 : String phone = tvphone.g ...
- 单源最短距离 Single Source Shortest Path
单源最短距离_示例程序_图模型_用户指南_MaxCompute-阿里云 https://help.aliyun.com/document_detail/27907.html 单源最短距离 更新时间:2 ...
- FW qunit introduction
自动化测试软件对于开发来说是一个很重要的工具,而单元测试对于自动化测试来说是基本组成部分:软件的每一个组件或者单元可以在非人工介入的情况下,使用测试工具一遍遍的重复执行.换句话说,就是你可以写一次测试 ...
- 如何在 window 上面输入特殊字符?
打开 字符映射表 程序 选中任意一个字符,它会在下方显示该字符的 16进制 转换16进制至10进制,并在输入法打开的状态下,按住 Alt 键输入 10 进制数值即可.
- MySQL(多表的表记录的查询)
一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...
- Android自定义属性:attr.xml 与 TypedArray
1.attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <de ...
- Python3+Selenium3自动化测试-(一)
完成环境的安装并测试之后,我们对Selenium有了一定的了解了,接下来我们继续驱动浏览器做一些基本操作: 窗口尺寸设置.网页截图.刷新.前进和后退 窗口尺寸设置 在测试过程中,我们可能会要求打开浏览 ...
- python web框架 Django的APP以及目录介绍 django 1.11版本
如果有很多业务请求函数 应该放在app目录 很多业务放在主站上 当用户一点跳到分站 例如 一个项目叫运维平台 他的业务 有资产管理 私有云 监控 不同业务线 chouti项目 - chouti - ...