Spark API 之 map、mapPartitions
来源:互联网 发布:织梦模板html源码 编辑:程序博客网 时间:2024/06/01 07:37
rdd的mapPartitions是map的一个变种,它们都可进行分区的并行处理。
两者的主要区别是调用的粒度不一样:map的输入变换函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区。
假设一个rdd有10个元素,分成3个分区。如果使用map方法,map中的输入函数会被调用10次;而使用mapPartitions方法的话,其输入函数会只会被调用3次,每个分区调用1次。
//生成10个元素3个分区的rdd a,元素值为1~10的整数(1 2 3 4 5 6 7 8 9 10),sc为SparkContext对象
val a = sc.parallelize(1 to 10, 3)
//定义两个输入变换函数,它们的作用均是将rdd a中的元素值翻倍
//map的输入函数,其参数e为rdd元素值
def myfuncPerElement(e:Int):Int = {
println("e="+e)
e*2
}
//mapPartitions的输入函数。iter是分区中元素的迭代子,返回类型也要是迭代子
def myfuncPerPartition ( iter : Iterator [Int] ) : Iterator [Int] = {
println("run in partition")
var res = for (e <- iter ) yield e*2
res
}
val b = a.map(myfuncPerElement).collect
val c = a.mapPartitions(myfuncPerPartition).collect
在spark shell中运行上述代码,可看到打印了3次run in partition,打印了10次e=。
从输入函数(myfuncPerElement、myfuncPerPartition)层面来看,map是推模式,数据被推到myfuncPerElement中;mapPartitons是拉模式,myfuncPerPartition通过迭代子从分区中拉数据。
这两个方法的另一个区别是在大数据集情况下的资源初始化开销和批处理处理,如果在myfuncPerPartition和myfuncPerElement中都要初始化一个耗时的资源,然后使用,比如数据库连接。在上面的例子中,myfuncPerPartition只需初始化3个资源(3个分区每个1次),而myfuncPerElement要初始化10次(10个元素每个1次),显然在大数据集情况下(数据集中元素个数远大于分区数),mapPartitons的开销要小很多,也便于进行批处理操作。
mapPartitionsWithIndex和mapPartitons类似,只是其参数多了个分区索引号。
- Spark API 之 map、mapPartitions
- Spark API 详解/大白话解释 之 map、mapPartitions、mapValues、mapWith、flatMap、flatMapWith、flatMapValues
- Spark API 详解/大白话解释 之 map、mapPartitions、mapValues、mapWith、flatMap、flatMapWith、flatMapValues
- spark:map mapPartitions flatmap
- spark:map mapPartitions flatmap
- spark 的transformations之map,flatMap,mapPartitions,mapPartitionsWithIndex的用法
- spark map和mapPartitions的区别
- Spark编程之基本的RDD算子之map,mapPartitions, mapPartitionsWithIndex.
- 第45课 Spark 2.0实战之Dataset:map、flatMap、mapPartitions、dropDuplicate、coalesce、repartition等
- Spark---算子调优之MapPartitions提升Map类操作性能
- spark map flatMap flatMapToPair mapPartitions 的区别和用途
- Spark RDD中Transformation的map、flatMap、mapPartitions、glom详解
- spark map flatMap flatMapToPair mapPartitions 的区别和用途
- 【Spark Java API】Transformation(1)—mapPartitions、mapPartitionsWithIndex
- Spark mapPartitions()操作
- Spark中的mapPartitions
- Spark中mapPartitions使用
- spark--transform算子--mapPartitions
- Intellij IDEA 代码提示快捷键修改(智能感知)
- Python代码风格和PEP8
- HDU 2456 饭卡
- CSRF攻击原理及防御
- JS操作串口方法简介
- Spark API 之 map、mapPartitions
- vimの:normal用法
- 外链检查
- VR开发——Unity中的VR Api的介绍(**V客学院**)
- 第三十五篇: JAVA发送邮件最全示例
- Spring Data JPA入门
- 648. Replace Words
- 论最恶心的公司老板
- K-Means聚类算法及延伸