val rdd = sparkContext.textFile("src/main/spark_test/data1")
//map 分割和flatMap分割的不同
//map
println("#######################")
rdd.map(_.split(";")).collect().foreach(data => println(data.mkString))
println("#######################")
//flatMap
rdd.flatMap(_.split(";")).collect().foreach(data => println(data.mkString))
/*
* 比较map和flatMap
* flatMap会拆解元素内部包裹的元素,map则是对第一层遇到的元素进行操作,flatMap操作完再进行拆解到第二层粒度
* 注意,flatMap只能扁平化两层的数据
* !!!当不能满足直接扁平化映射的需求,则需要在flatMap中自定义逻辑,将参数按照自己的需求进行转化
* */
println("#######################")
val rdd1 = sparkContext.makeRDD(List("hotpot", 1, List(1, 2, 3)))
println(rdd1.flatMap(
data => {
data match {
case list: List[_] => list
case int: Int => List(int)
case string: String => string.toList
}
}
).collect().mkString(","))
/*
* flatMap三层嵌套的解析方式
* */
println("#######################")
//解析出的元素还是LIST
val rdd3 = sparkContext.makeRDD(
List(List(List("lorin", "rainBaby"), List("happy", "sixOne")),List(List("pokey", "danta"), List("paopao", "zaizai")))
)
rdd3.flatMap(list=>list).collect().foreach(println)
println("#######################")
//解析出的元素是LIST中的字符串
rdd3.flatMap(
_ match {
case list: List[_] => list.flatMap(list => list)
}
).collect().foreach(println)
println("#######################")
val rdd5 =sparkContext.makeRDD(List(List("happy",1),"happy2",List(List("happy3","happy5"),"happy4")))
rdd5.flatMap(
list=>{
list match {
case string: String=> List(string)
case list: List[_]=>list
}
}
).collect().foreach(println(_))
map、flatMapRDD异同点总结
于 2023-08-24 11:46:56 首次发布