Spark API

Spark RDD API使用说明(一)

1、aggregate

1.1  函数声明

def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U)=> U): U

1.2函数说明

aggregate函数通过两个函数来操作RDD。第一个reduce函数(seqOp)对每个partition聚合,然后将初始值(zeroValue)和所有partitions的结果进行(combOp)操作,生成最终结果。应用两个reduce函数十分方便,比如:第一个用于求各个partition的最大值,第二个用于汇总每个partition的和。

1.3  实例

scala> def seqOp(a:Int , b:Int) : Int = {
     | math.max(a, b)
     | }
seqOp: (a: Int, b: Int)Int

scala> def combOp(a:Int, b:Int) : Int = {
     | a + b
     | }
combOp: (a: Int, b: Int)Int

scala> val v = sz.parallelize(List(1,2,3,4,5,6), 3)
scala> v.aggregate(4)(seqOp, combOp)
结果:18
计算过程:
	首先分为三个区:(1,2) ,(3,4) ,(5,6)
	然后 调用max(4,1,2),max(4,3,4),max(4,5,6)。计算三个区的结果分别为:4,4,6
	在对三个区和初始值4进行聚合:4+4=8;8+4=12;12+6=18
注意:初始值zeroValue使用了两次:1在各个partition使用;2,对partition合并的适合使用

2、aggregateByKey

2.1函数声明       

def aggregateByKey[U](zeroValue: U)(seqOp: (U, V) ⇒ U, combOp: (U, U) ⇒ U)(implicitarg0: ClassTag[U]): RDD[(K, U)]
def aggregateByKey[U](zeroValue: U, numPartitions: Int)(seqOp: (U, V) ⇒ U, combOp: (U, U) ⇒ U)(implicitarg0: ClassTag[U]): RDD[(K, U)]
def aggregateByKey[U](zeroValue: U, partitioner: Partitioner)(seqOp: (U, V) ⇒ U, combOp: (U, U) ⇒ U)(implicitarg0: ClassTag[U]): RDD[(K, U)]

2.2 函数说明

         和aggregate类似,区别是:1,只对具有相同key的值进行聚合;2,初始值只出现在第一个reduce函数(seqOp)

2.3 实例        

val pariRDD = sc.parallelize(List( ("cat", 2), ("cat", 5),("mouse", 4), ("cat", 12), ("dog", 12),("mouse", 2)), 2)
 //定义函数,显示分区情况
def func(index:Int, iter:Iterator[(String, Int)]):Iterator[String] = {
           iter.toList.map(x => "[partID:" +index + ", val:" + x + "]").iterator
}
//查看分区情况
pairRDD.mapPartitionsWithIndex(func).collect
//结果:Array[String]= Array([partID:0, val:(cat,2)], [partID:0, val:(cat,5)], [partID:0,val:(mouse,4)], [partID:1, val:(cat,12)], [partID:1, val:(dog,12)], [partID:1,val:(mouse,2)])
pairRDD.aggregateByKey((0))(math.max(_,_),_+_).collect
//结果:Array[(String,Int)] = Array((dog,12), (cat,17), (mouse,6))
pairRDD.aggregateByKey(100)(math.max(_,_), _ + _).collect
//结果:Array((dog,100), (cat,200), (mouse,200))

3、cartesian

3.1函数声明

def cartesian[U:ClassTag](other: RDD[U]): RDD[(T, U)]

3.2 函数说明

         计算两个RDD的笛卡尔积,然后返回一个新的RDD(注意:应用此函数内存消耗很快)

3.3 实例

valx = sc.parallelize(List(1,2,3,4,5))
val y = sc.parallelize(List(6,7,8,9,10))
x.cartesian(y).collect
res0: Array[(Int, Int)] = Array((1,6),(1,7), (1,8), (1,9), (1,10), (2,6), (2,7), (2,8), (2,9), (2,10), (3,6), (3,7),(3,8), (3,9), (3,10), (4,6), (5,6), (4,7), (5,7), (4,8), (5,8), (4,9), (4,10),(5,9), (5,10))

4、coalesce,repartition

4.1函数声明

         def coalesce ( numPartitions : Int , shuffle : Boolean = false ): RDD [T]

def repartition( numPartitions : Int ): RDD [T]

4.2 函数说明

         将partition合并成指定数目的partition

4.3实例

val y = sc.parallelize(1 to 10, 10)
val z = y.coalesce(2, false)
z.partitions.length
结果: Int = 2

更多相关文章
  • 随着越来越多的O2O服务走进人们的生活,涉及到衣食住行这几个全民刚需的服务也越来越被用户依赖.移动互联网下,生鲜蔬果作为人们生活的必需品得到了互联网行业的重视.生鲜O2O领域开始获得越来越多资本的关注,大量生鲜O2O平台也如雨后春笋般兴起.巨头入局生鲜020,中小企业何去何从?O2O日益火爆不仅创业 ...
  • 本文主要是讨论在最近项目中遇到的一个下拉刷新控件,这个控件的效果如下图:   在这里会用两篇博文的篇幅来解析这个控件,第一篇解析控件的框架,第二篇解析动画.源代码可以在下面的链接下载: TestPullToRefresh.zip    1.这个控件由以下几个文件组成:GMPullToAction.C ...
  • 在互联网已经成功"挟持"我们的现在,假如未来某天早晨起床后发现,网络瘫痪,服务器宕机,我们早已习惯了的"秩序"轰然倒塌,那会是何种场景?   人始终有种不满足的心态,希望身边的一切都是完美的,但现实却总不能如愿.就像服务器,谁也不敢说能够达到100%的可靠性. ...
  • 美国官员告诉美国全国广播公司(NBC)说,俄罗斯对五角大楼联合参谋部的非机密电子邮件系统发起了“精密的网络攻击”.该非保密电子邮件系统已被关闭近两周.该官员说,俄罗斯在7月25日左右发起了“复杂的网络入侵”.这影响了约4000名在联合参谋部工作的军人和平民.   消息人士向NBC表示,网络攻击似乎依 ...
  • [DllImport("user32.dll", EntryPoint = "FindWindow")]         public static extern int FindWindow(             string lpClassName, ...
  • 文/李书航昨天腾讯在全球移动互联网大会上推出了腾讯操作系统TOS,这是一个手机的ROM,以及多种针对不同种类智能硬件所开发的固件的集合.根据腾讯的介绍,未来将会进一步把所有可以称为智能硬件的设备,都装上TOS,并且实现和QQ.微信以及其他腾讯服务之间的更紧密的连接.而现在所披露的手表,游戏机和虚拟现 ...
一周排行
  • 易网科技讯 3月2日消息,盛大今日公布了2010年第四季度及全年财报.在今日纳斯达克盘后交易中,盛大股价微跌0.22%,报42.01美元. 在纳斯达克正常交易中,盛大股价下跌0.07%,报收42.1美元. 盛大财报显 ...
  • 本报讯(记者李斌)昨天,金山软件宣布旗下首款自主研发的3D武侠网游<剑侠情缘网络版叁>(以下简称<剑网3>)封测圆满结束,创下了国内网游150万名玩家注册的新纪录. 金山软件高级副总裁兼金山游 ...
  • 韩国第三大手机生产商破产 跪求员工薪资打8折12月15日消息,据国外媒体报道,韩国第三大手机生产商泛泰集团因陷于大量债务问题,日前恳请公司员工将今年12月到明年3月的20%工资返还给公司,以帮助公司渡过难关.目前来看 ...
  • 转自:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1882.html   new 分配的单个对象的内存空间的时候用 delete,回收用 new[] ...
  •   2009年的时候写了一篇"解决问题:心态 原则 方法",那么快就3年了,今天继续这个话题,把我解决问题的心得记录分享一下;下面的内容来自我平时的笔记,我按照问题解决的过程,重新整理了一下.   ...
  • 遇到的问题: 1   获取群组和用户的信息时,数据不能从服务器获取.一定要从本地.否则会报错.     我们采取的解决方案是刚开始从服务器获取所有自己的好友或者群组信息.保证这部分数据可以正常显示. 所有不是好友的人 ...
  • 文/李好宇2月4日晚间消息,搜狗发布2012年年报,斩获1.31亿美元营收,同比增长108%.王小川更放言 2013年搜狗要进入互联网舞台的中心.抛开容易让人迷惑的数字和图表,搜狗 "三级火箭"模 ...
  • 这篇文章主要介绍了css实现照片模糊效果类似毛玻璃效果,需要的朋友可以参考下 代码如下: <img class="blur" src="test.jpg" /> c ...
  • 本文讲一下在canvas中画出矩形和圆形的办法,他们属于基础图形.当然,基础图形本来不止他们,但在canvas中,只有画矩形与圆形不需要用其他方法模拟,感兴趣的朋友可以了解下 本文讲一下在canvas中画出矩形和圆形 ...
  • 基数排序(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配 ...