Spark常用算子分析与应用
1 Value型转换算子
• 1) map
o 类比于mapreduce中的map操作,给定一个输入通过map函数映到成一个新的元素输出
case_1
val first = sc.parallelize(List(“Hello”,“World”,“哈哈哈”,“大数据”),2)
val second= first.map(_.length)
second.collect
case_2
val first = sc.parallelize(1 to 5,2)
first.map(1 to _).collect
• 2) flatMap
o 给定一个输入,将返回的所有结果打平成一个一维集合结构
case_1
val first = sc.parallelize(1 to 5,2)
first.flatMap(1 to _).collect
case_2
val first = sc.parallelize(List(“one”,“two”,“three”),2)
first.flatMap(x => List(x,x,x)).collect
case_3
val first = sc.parallelize(List(“one”,“two”,“three”),2)
first.flatMap(x => List(x+"_1",x+"_2",x+"_3")).collect
• 3) mapPartitions
o 以分区为单位进行计算处理,而map是以每个元素为单位进行计算处理。
o 当在map过程中需要频繁创建额外对象时,如文件输出流操作、jdbc操作、Socket操作等时,当用mapPartitions算子
case_1
val rdd=sc.parallelize(Seq(1,2,3,4,5),3)
var rdd2=rdd.mapPartitions(partition=>{
//在此处加入jdbc等一次初始化多次使用的代码
partition.map(num => num * num)
}
)
rdd2.max
case_2
val rdd=sc.parallelize(Seq(1,2,3,4,5),3)
var rdd2=rdd.mapPartitions(partition=>