关键字: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相关推荐

  1. 详解 Spark RDD 的转换操作与行动操作

    前言 本期继续讲解 Spark 核心 RDD 编程部分,内容比较干货也比较长,建议大家先收藏. 学习目标 RDD 的创建 RDD 的转换操作 RDD 的行动操作 惰性求值 1. RDD 的创建 Spa ...

  2. Spark算子:RDD基本转换操作–coalesce、repartition

    1. coalesce def coalesce(numPartitions: Int, shuffle: Boolean = false)(implicit ord: Ordering[T] = n ...

  3. RDD基本转换操作:zipWithIndex、zipWithUniqueId

    zipWithIndex def zipWithIndex(): RDD[(T, Long)] 该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对. scala> var  ...

  4. DStream转换操作

    Spark Streaming中对DStream的转换会转变成对RDD的转换操作,流程如下: 其中,lines表示转换操作前的DStream,words表示转换操作后生成的DStream.对lines ...

  5. “戏”说Spark-Spark核心-RDD转换操作算子详解(一)

    "戏"说Spark-Spark核心-RDD转换行动类算子详解 算子概述 对于RDD可以有两种计算方式: 转换(返回值还是一个RDD)---懒执行 操作(返回值不是一个RDD)--- ...

  6. Spark算子与RDD基本转换

    map 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素. 输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区. flatMap 属于Transformation算子 ...

  7. [scala-spark]10. RDD转换操作

    RDD提供了一组非常丰富的操作来操作数据,如:map,flatMap,filter等转换操作,以及SaveAsTextFile,conutByKey等行动操作.这里仅仅综述了转换操作. map map ...

  8. spark之RDD的转换算子与行为算子的具体使用

    文章目录 1.Transform算子 1.1 map 1.2 flatmap 1.3 groupBy和groupBykey 1.4 filter 1.5 Mappartitions 1.6 mapVa ...

  9. Spark函数详解系列--RDD基本转换

    http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...

最新文章

  1. Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
  2. JSON DATE 转换标准的一些资料(收集)
  3. Personal Leetcode solution(Python) 1~20
  4. 一个做运营的朋友过来抱怨,现在HR谈薪都这么强硬吗?
  5. webApp 开发技术要点总结
  6. 二进制中 1 的个数
  7. 看不懂JDK8的流操作?5分钟带你入门(转)
  8. 技术选型和知识点介绍(上)
  9. [RK3399][Android7.1] 调试笔记 --- 虚拟声卡驱动添加
  10. wireshark显示过滤器和捕获过滤器
  11. 电脑怎么让图片颜色反转?怎么调图片反色效果?
  12. 图像坐标球面投影_从球面到平面的投影
  13. oracle某字段所在的表,在oracle中怎么通过字段名查询其所在的表
  14. Nginx从入门到精通(笔记)
  15. 3DMAX模型转换为gltf格式总结与问题汇总
  16. c语言中函数声明的作用
  17. 火箭军计算机网络技术就业方向,计算机系统结构专业就业方向
  18. OneNMP路由器、交换机监控
  19. 随机变量的特征函数及应用
  20. 【Python】torrentParser1.04 增加获得磁力链URI功能

热门文章

  1. Leetcode 286.墙与门
  2. plt.title() 把标题置于图像下方
  3. 搜索指定期刊下的领域相关文章
  4. linux虚拟机发邮件给163邮件
  5. vue 项目安装 (入门)
  6. 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
  7. ocs添加仓库受限问题
  8. 按键显示按键编码 keycode
  9. 孤读Paper——《Deep Snake for Real-Time Instance Segmentation》
  10. maven的基本用法