scala 实现类似reduceByWindown的效果
来源:互联网 发布:一道打车软件 编辑:程序博客网 时间:2024/05/18 12:39
reduceByKey
spark 的做法,
package com.linewell.streamingimport org.apache.spark.{SparkContext, SparkConf}/** * Created by ctao on 2015/12/9. */object WordCount extends App{ val conf = new SparkConf().setMaster("local").setAppName("wordcount") val sc = new SparkContext(conf) val seq = Seq("hello","world","hello","scala","scala","good") sc.parallelize(seq).map(x => (x,1)).reduceByKey(_ + _).foreach(println)}
纯scala做法
val seq = Seq("hello","world","hello","scala","scala","good")for((k,v)<- seq.map(x => (x,1)).groupBy(_._1)) yield k -> v.map(_._2).sumseq.map(x => (x,1)).groupBy(_._1).map(x => x._1 -> x._2.map(_._2).sum)
reduceByWindow
在这里也不是完全的reduceByWindow,
源数据:(“a”, 1), (“a”, 1), (“a”, 1), (“b”, 1), (“b”, 1), (“c”, 1), (“c”, 1), (“c”, 1), (“a”, 1), (“b”, 1), (“b”, 1)
目标数据
(a,3)
(b,2)
(c,3)
(a,1)
(b,2)
需求分析:
连续聚类,如果出现连续一致的key,则合并,中间出现中断则作为两个kv对出现
纯scala做法:
利用模式匹配
如果是第一个元素,则构建一个list
如果是一个List和最后一个元素的时候,比较list的最后一个元素的k和最后一个元素的k是否一致,一致则进行value合并
/** * Created by ctao on 2015/12/8. */object Test extends App { val source = Seq(("a", 1), ("a", 1), ("a", 1), ("b", 1), ("b", 1), ("c", 1), ("c", 1), ("c", 1), ("a", 1), ("b", 1), ("b", 1)) source.foldLeft(List[(String,Int)]()) { case (Nil, t) => List(t) case (xs,j) => if(xs.last._1 == j._1) { xs.init :+ (xs.last._1,xs.last._2+j._2) } else xs :+ j }.foreach(println)}
0 0
- scala 实现类似reduceByWindown的效果
- 类似NumberPicker的效果实现
- 类似horizon效果的实现
- 类似Google Calendar效果的简单实现
- 实现类似 lightbox的 页面等待效果
- mysql实现类似rownumber()的效果
- 自定义uiview 实现类似alertview的效果
- UITabBarController 类似自定义效果的实现
- MySQL实现类似Oracle的row_number效果
- 实现popupWindow类似效果的activity
- ListView实现类似WheelView效果的探究
- 用Activity实现类似AlertDialog的效果
- Viewpager实现类似网易新闻的效果
- 实现类似格瓦拉的动画转场效果
- 自定义 LinearLayout 实现类似 CoordinatorLayout 的效果
- QT treeview实现类似tableview的效果
- 实现类似Android的网格效果的列表视图
- 类似 AJAX 地图的拖拽后加载的效果实现原理??
- 论文选题依据
- listview下拉刷新 上拉(滑动分页)加载更多
- Linux下MySQL数据库的备份与还原
- 用chrom调试websocket时遇到6000端口提示ERR_UNSAFE_PORT
- 游戏中三角模型探索--初学
- scala 实现类似reduceByWindown的效果
- SAP Client Copy 过程
- 换机日记
- 数据结构实践项目——文件
- cocods pod重新指向
- 解决Tomcat xxx unbound
- 修改 IntelliJ IDEA 的默认文件编码
- MySQL的SSL加密连接与性能开销
- QQ登陆注册