spark学习-16-Spark的Map()和FlatMap()函数使用

原文链接: https://blog.csdn.net/qq_21383435/article/details/77477681

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21383435/article/details/77477681
1。先看图

解释:map函数和faltMap()函数都会像是工厂一样,对你每个元素都做处理

map会将每一条输入映射为一个新对象。{苹果,梨子}.map(去皮) = {去皮苹果,去皮梨子} 其中: “去皮”函数的类型为:A => B 2.flatMap包含两个操作:会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合。 {苹果,梨子}.flatMap(切碎) = {苹果碎片1,苹果碎片2,梨子碎片1,梨子碎片2} 其中: “切碎”函数的类型为: A => List
“flatMap “函数的一半功能和map函数一样,不过有个要求,传入的函数在处理完后返回值必须是List(应该是Seq),如果结果不是List(Seq),那么将出错。也就是说,传入的函数是有要求的——返回值是Seq才行。这样,每个元素处理后返回一个List,我们得到一个包含List元素的List,flatMap自动将所有的内部list的元素取出来构成一个List返回。 sample:

var li= List(1,2,3,4)
li.flatMap(x => x match {
     case 3 => List(3.1,3.2)
     case _ => x*2
  })

//结果=>
main.scala:4: error: type mismatch;
 found   : Int
 required: scala.collection.GenTraversableOnce[?]
      case _ => x*2
1
2
3
4
5
6
7
8
9
10
11
传入flatMpa的函数返回值必须是List,将x*2改成List(x*2),并且和map函数对比一下,看结果:

var li= List(1,2,3,4)
var res = li.flatMap(x => x match {
     case 3 => List(3.1,3.2)
     case _ => List(x*2)
  })
println(res)
li= List(1,2,3,4)
var  res2 = li.map(x => x match {
     case 3 => List(3.1,3.2)
     case _ => x*2
  })
println(res2)

//output=>
List(2, 4, 3.1, 3.2, 8)
List(2, 4, List(3.1, 3.2), 8)
Program exited.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象;
flatMap函数则是两个操作的集合——正是“先映射后扁平化”:
1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象
2:最后将所有对象合并为一个对象


————————————————
版权声明:本文为CSDN博主「九师兄-梁川川」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21383435/article/details/77477681

你可能感兴趣的:(BigData)