说明
flatMap 算子类似 scala 中的 flatMap(),先执行 map(),后执行 flatten
案例
将数据展平
有下面 Array:
Array( Array(1,2),Array(3,4) )
将数据展平,如上图
代码:
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd: RDD[List[Int]] = sc.makeRDD(Array( Array(1,2),Array(3,4) ))
val resRDD = rdd.flatMap(e=>e)
resRDD.collect().foreach(println)
sc.stop()
拆分姓名
有一个数组如下:
Array("李雷 韩梅梅","李雷 lucy","韩梅梅 lili")
根据名字进行拆分,最终打印效果如下:
李雷
韩梅梅
李雷
lucy
韩梅梅
lili
代码
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd: RDD[String] = sc.makeRDD(Array("李雷 韩梅梅","李雷 lucy","韩梅梅 lili"))
val resRDD = rdd.flatMap(_.split(" "))
resRDD.collect().foreach(println)
sc.stop()
统一数据类型
有下面 数组:
Array( Array(1,2),Array(3,4) ,5,"李雷" )
其元素类型不统一,将数据展平
代码:
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd = sc.makeRDD( List( List(1,2),List(3,4) ,5,"李雷" ) )
val resRDD = rdd.flatMap(e=> {
e match {
case array:Array[Int] => array //如果是数组就直接返回
case data => List(data) //如果是其他类型,就封装成List
}
})
resRDD.collect().foreach(println)
sc.stop()
