“flatMap “函数的一半功能和map函数一样,不过有个要求,传入的函数在处理完后返回值必须是List(应该是Seq),如果结果不是List(Seq),那么将出错。也就是说,传入的函数是有要求的——返回值是Seq才行。这样,每个元素处理后返回一个List,我们得到一个包含List元素的List,flatMap自动将所有的内部list的元素取出来构成一个List返回。
flatMapValues (f:v=>seq(w)):RDD[(K,V)]=>RDD[Seq[k,W]]
http://www.cnblogs.com/MOBIN/p/5414490.html
2.flatMapValues(fun):对[K,V]型数据中的V值flatmap操作
(例2):
1
2
3
4
|
//省略<br>val
list = List(("mobin",22),("kpop",20),("lufei",23)) val
rdd = sc.parallelize(list) val
mapValuesRDD = rdd.flatMapValues(x => Seq(x, "male" )) mapValuesRDD.foreach(println) |
输出:
(mobin,22) (mobin,male) (kpop,20) (kpop,male) (lufei,23) (lufei,male)
如果是mapValues会输出:
(mobin,List(22, male)) (kpop,List(20, male)) (lufei,List(23, male))
(RDD依赖图)

combineByKey(createCombiner,mergeValue,mergeCombiners,partitioner,mapSideCombine)
combineByKey(createCombiner,mergeValue,mergeCombiners,numPartitions)
combineByKey(createCombiner,mergeValue,mergeCombiners)
createCombiner:在第一次遇到Key时创建组合器函数,将RDD数据集中的V类型值转换C类型值(V => C),
如例3:

mergeValue:合并值函数,再次遇到相同的Key时,将createCombiner道理的C类型值与这次传入的V类型值合并成一个C类型值(C,V)=>C,
如例3:

mergeCombiners:合并组合器函数,将C类型值两两合并成一个C类型值
如例3:
(peo1:(List[String],Int),peo2:(List[Strng],Int))=>(List[String],Int)
partitioner:使用已有的或自定义的分区函数,默认是HashPartitioner
mapSideCombine:是否在map端进行Combine操作,默认为true
注意前三个函数的参数类型要对应;第一次遇到Key时调用createCombiner,再次遇到相同的Key时调用mergeValue合并值
(例3):统计男性和女生的个数,并以(性别,(名字,名字....),个数)的形式输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
object
CombineByKey { def
main(args: Array[String]) { val
conf = new SparkConf().setMaster( "local" ).setAppName( "combinByKey" ) val
sc = new SparkContext(conf) val
people = List(( "male" , "Mobin" ),
( "male" , "Kpop" ),
( "female" , "Lucy" ),
( "male" , "Lufei" ),
( "female" , "Amy" )) val
rdd = sc.parallelize(people) val
combinByKeyRDD = rdd.combineByKey( (x:
String) => (List(x), 1 ), (peo:
(List[String], Int), x : String) => (x :: peo._1, peo._2 + 1 ), (sex1:
(List[String], Int), sex2: (List[String], Int)) => (sex1._1 ::: sex2._1, sex1._2 + sex2._2)) combinByKeyRDD.foreach(println) sc.stop() } } |
输出:
(male,(List(Lufei, Kpop, Mobin),3)) (female,(List(Amy, Lucy),2))