mappartitions java_Spark算子:RDD基本转换操作(5)–mapPartitions、mapPartitionsWithIndex
关键字:Spark算子、Spark RDD基本转换、mapPartitions、mapPartitionsWithIndex
mapPartitions
def mapPartitions[U](f: (Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U]
该函数和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。如果在映射的过程中需要频繁创建额外的对象,使用mapPartitions要比map高效的过。
比如,将RDD中的所有数据通过JDBC连接写入数据库,如果使用map函数,可能要为每一个元素都创建一个connection,这样开销很大,如果使用mapPartitions,那么只需要针对每一个分区建立一个connection。
参数preservesPartitioning表示是否保留父RDD的partitioner分区信息。
var rdd1 = sc.makeRDD(1 to 5,2)
//rdd1有两个分区
scala> var rdd3 = rdd1.mapPartitions{ x => {
| var result = List[Int]()
| var i = 0
| while(x.hasNext){
| i += x.next()
| }
| result.::(i).iterator
| }}
rdd3: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[84] at mapPartitions at :23
//rdd3将rdd1中每个分区中的数值累加
scala> rdd3.collect
res65: Array[Int] = Array(3, 12)
scala> rdd3.partitions.size
res66: Int = 2
mapPartitionsWithIndex
def mapPartitionsWithIndex[U](f: (Int, Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U]
函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引。
var rdd1 = sc.makeRDD(1 to 5,2)
//rdd1有两个分区
var rdd2 = rdd1.mapPartitionsWithIndex{
(x,iter) => {
var result = List[String]()
var i = 0
while(iter.hasNext){
i += iter.next()
}
result.::(x + "|" + i).iterator
}
}
//rdd2将rdd1中每个分区的数字累加,并在每个分区的累加结果前面加了分区索引
scala> rdd2.collect
res13: Array[String] = Array(0|3, 1|12)
如果觉得本博客对您有帮助,请 赞助作者 。
mappartitions java_Spark算子:RDD基本转换操作(5)–mapPartitions、mapPartitionsWithIndex相关推荐
- 详解 Spark RDD 的转换操作与行动操作
前言 本期继续讲解 Spark 核心 RDD 编程部分,内容比较干货也比较长,建议大家先收藏. 学习目标 RDD 的创建 RDD 的转换操作 RDD 的行动操作 惰性求值 1. RDD 的创建 Spa ...
- Spark算子:RDD基本转换操作–coalesce、repartition
1. coalesce def coalesce(numPartitions: Int, shuffle: Boolean = false)(implicit ord: Ordering[T] = n ...
- RDD基本转换操作:zipWithIndex、zipWithUniqueId
zipWithIndex def zipWithIndex(): RDD[(T, Long)] 该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对. scala> var ...
- DStream转换操作
Spark Streaming中对DStream的转换会转变成对RDD的转换操作,流程如下: 其中,lines表示转换操作前的DStream,words表示转换操作后生成的DStream.对lines ...
- “戏”说Spark-Spark核心-RDD转换操作算子详解(一)
"戏"说Spark-Spark核心-RDD转换行动类算子详解 算子概述 对于RDD可以有两种计算方式: 转换(返回值还是一个RDD)---懒执行 操作(返回值不是一个RDD)--- ...
- Spark算子与RDD基本转换
map 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素. 输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区. flatMap 属于Transformation算子 ...
- [scala-spark]10. RDD转换操作
RDD提供了一组非常丰富的操作来操作数据,如:map,flatMap,filter等转换操作,以及SaveAsTextFile,conutByKey等行动操作.这里仅仅综述了转换操作. map map ...
- spark之RDD的转换算子与行为算子的具体使用
文章目录 1.Transform算子 1.1 map 1.2 flatmap 1.3 groupBy和groupBykey 1.4 filter 1.5 Mappartitions 1.6 mapVa ...
- Spark函数详解系列--RDD基本转换
http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...
最新文章
- Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
- JSON DATE 转换标准的一些资料(收集)
- Personal Leetcode solution(Python) 1~20
- 一个做运营的朋友过来抱怨,现在HR谈薪都这么强硬吗?
- webApp 开发技术要点总结
- 二进制中 1 的个数
- 看不懂JDK8的流操作?5分钟带你入门(转)
- 技术选型和知识点介绍(上)
- [RK3399][Android7.1] 调试笔记 --- 虚拟声卡驱动添加
- wireshark显示过滤器和捕获过滤器
- 电脑怎么让图片颜色反转?怎么调图片反色效果?
- 图像坐标球面投影_从球面到平面的投影
- oracle某字段所在的表,在oracle中怎么通过字段名查询其所在的表
- Nginx从入门到精通(笔记)
- 3DMAX模型转换为gltf格式总结与问题汇总
- c语言中函数声明的作用
- 火箭军计算机网络技术就业方向,计算机系统结构专业就业方向
- OneNMP路由器、交换机监控
- 随机变量的特征函数及应用
- 【Python】torrentParser1.04 增加获得磁力链URI功能