zip和zipPartitions
zip函数用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。
scala> val aa=sc.makeRDD(1 to 10)
aa: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[86] at makeRDD at <console>:26
scala> val cc=sc.makeRDD(21 to 30)
cc: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[88] at makeRDD at <console>:26
scala> aa.zip(bb).collect
res62: Array[(Int, Int)] = Array((1,21), (2,22), (3,23), (4,24), (5,25), (6,26), (7,27), (8,28), (9,29), (10,30))
zipPartitions函数将多个RDD按照partition组合成为新的RDD,该函数需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求。
def zipPartitions[B, C, D, V](rdd2: org.apache.spark.rdd.RDD[B],rdd3: org.apache.spark.rdd.RDD[C],rdd4: org.apache.spark.rdd.RDD[D],preservesPartitioning: Boolean)(f: (Iterator[Int], Iterator[B], Iterator[C], Iterator[D]) => Iterator[V])(implicit evidence$21: scala.reflect.ClassTag[B],implicit evidence$22: scala.reflect.ClassTag[C],implicit evidence$23: scala.reflect.ClassTag[D],implicit evidence$24: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
def zipPartitions[B, C, V](rdd2: org.apache.spark.rdd.RDD[B],rdd3: org.apache.spark.rdd.RDD[C],preservesPartitioning: Boolean)(f: (Iterator[Int], Iterator[B], Iterator[C]) => Iterator[V])(implicit evidence$15: scala.reflect.ClassTag[B],implicit evidence$16: scala.reflect.ClassTag[C],implicit evidence$17: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
def zipPartitions[B, C, D, V](rdd2: org.apache.spark.rdd.RDD[B],rdd3: org.apache.spark.rdd.RDD[C],rdd4: org.apache.spark.rdd.RDD[D])(f: (Iterator[Int], Iterator[B], Iterator[C], Iterator[D]) => Iterator[V])(implicit evidence$25: scala.reflect.ClassTag[B],implicit evidence$26: scala.reflect.ClassTag[C],implicit evidence$27: scala.reflect.ClassTag[D],implicit evidence$28: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
def zipPartitions[B, V](rdd2: org.apache.spark.rdd.RDD[B],preservesPartitioning: Boolean)(f: (Iterator[Int], Iterator[B]) => Iterator[V])(implicit evidence$11: scala.reflect.ClassTag[B],implicit evidence$12: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
def zipPartitions[B, V](rdd2: org.apache.spark.rdd.RDD[B])(f: (Iterator[Int], Iterator[B]) => Iterator[V])(implicit evidence$13: scala.reflect.ClassTag[B],implicit evidence$14: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
def zipPartitions[B, C, V](rdd2: org.apache.spark.rdd.RDD[B],rdd3: org.apache.spark.rdd.RDD[C])(f: (Iterator[Int], Iterator[B], Iterator[C]) => Iterator[V])(implicit evidence$18: scala.reflect.ClassTag[B],implicit evidence$19: scala.reflect.ClassTag[C],implicit evidence$20: scala.reflect.ClassTag[V]): org.apache.spark.rdd.RDD[V]
举例如下:
scala> val aa=sc.makeRDD(1 to 10)
aa: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[86] at makeRDD at <console>:26
scala> val bb=sc.makeRDD(11 to 15)
bb: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[87] at makeRDD at <console>:26
scala> val cc=sc.makeRDD(21 to 35)
cc: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[88] at makeRDD at <console>:26
scala> aa.zipPartitions(aa,bb){(aaiter,bbiter,cciter)=>{var result=List[(Int,Int,Int)]();while(aaiter.hasNext&&bbiter.hasNext&&cciter.hasNext){result::=(aaiter.next,bbiter.next,cciter.next)};result.toIterator}}.collect
res56: Array[(Int, Int, Int)] = Array((1,1,11), (3,3,12), (6,6,13), (9,9,15), (8,8,14))
----------------------
def zipWithIndex(): org.apache.spark.rdd.RDD[(Int, Long)]
zipWithIndex将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对
scala> bb.zipWithIndex().collect
res64: Array[(Int, Long)] = Array((21,0), (22,1), (23,2), (24,3), (25,4), (26,5), (27,6), (28,7), (29,8), (30,9))
--------------------------------
def zipWithUniqueId(): org.apache.spark.rdd.RDD[(Int, Long)]
zipWithUniqueId将RDD中的元素和一个唯一的ID组成键/值对
这个唯一ID生成算法如下:
每个分区中第一个元素的唯一ID值为:该分区索引号;
每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数)
scala> bb.zipWithUniqueId().collect
res67: Array[(Int, Long)] = Array((21,0), (22,4), (23,1), (24,5), (25,9), (26,2), (27,6), (28,3), (29,7), (30,11))
zip和zipPartitions的更多相关文章
- (转)Spark 算子系列文章
http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...
- spark 的RDD各种转换和动作
今天先把spark的各种基本转换和动作总结下,以后有时间把各种用法放上去. 1 RDD基本转换操作 map.flagMap.distinct coalesce.repartition coale ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...
- android_m2repository_rxx.zip下载地址以及MD5
地址 MD5 https://dl-ssl.google.com/android/repository/android_m2repository_r08.zip 8C8EC4C731B7F55E646 ...
- Winserver2012下mysql 5.7解压版(zip)配置安装
一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...
- salesforce 零基础学习(五十三)多个文件生成一个zip文件(使用git上封装的代码)
此篇参考git代码:https://github.com/pdalcol/Zippex 学习salesforce可以访问一个朋友的网站:https://www.xgeek.net 首先感谢git上提供 ...
- 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档
通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...
随机推荐
- 黄聪:bootstrapValidator验证成功,按钮变灰却无法提交的问题
对于这个坑真心无语! 主要问题是按钮的id和name不能为submit! 改成别的就好了!
- create-react-app快速搭建react-app
npm i create-react-app -g 全局安装 create-react-app mydemo 创建一个项目,安装依赖 cd mydemo 进入mydemo目录 yearn sta ...
- [蓝桥杯]ALGO-49.算法训练_寻找数组中最大值
题目描述: 问题描述 对于给定整数数组a[],寻找其中最大值,并返回下标. 输入格式 整数数组a[],数组元素个数小于1等于100.输出数据分作两行:第一行只有一个数,表示数组元素个数:第二行为数组的 ...
- 【spring】之事物配置,声明式事务管理和基于@Transactional注解的使用
http://blog.csdn.net/bao19901210/article/details/41724355
- PAT 乙级 1005 继续(3n+1)猜想 (25) C++版
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...
- flume使用之httpSource
flume自带很长多的source,如:exe.kafka...其中有一个非常简单的source——httpsource,使用httpSource,flume启动后会拉起一个web服务来监听指定的ip ...
- js中的内置对象(还没怎么看)
在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在 ...
- mongodb json序列化时间格式
利用bson解决 type error 报错问题. # 序列化 from bson import json_util import json aa = json.dumps(anObject, def ...
- [UE4]计算小地图比例尺
一.调整到顶视图,按住鼠标中键从地图的左边拉一根线到右边,可以看到距离是4000厘米(UE4单位是厘米). 二.查看到缩略图片的长度是512px,512/4000 = 0.128,比例尺是0.128. ...
- CAP在MySQL的分析
此文转载在登博的文章,给大家分享 问题一:数据一致性.在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零丢失. 问题二: ...