spark3.0教程:RDD转换算子flatMap()

说明

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()

原文出处:/show_1IX1KIHQguw8.html