简介: 在大数据领域Spark/Flink的大量业务代码都会使用到函数式编程,所以这一部分很重点哦!!
- 就下面几种方法嘛 ~~~~
- 遍历(foreach)
- 映射(map)
- 映射扁平化(flatmap)
- 过滤(filter)
- 是否存在(exists)
- 排序(sorted、sortBy、sortWith)
- 分组(groupBy)
- 聚合计算(reduce)
- 折叠(fold)
解释: 在Scala中 _ 属于通配符
1. 遍历 foreach
- scala的函数式编程,使用foreach方法来进行遍历、迭代。它可以让代码更加简洁。
方法:
集合对象.foreach(f: (A) ⇒ Unit): Unit
例子:
// 定义一个列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
// 迭代打印
scala> a.foreach((x:Int)=>println(x)) //复杂了
//优化 省略参数
scala> a.foreach(x => println(x))
18000
20000
22000
//在优化 下划线代替(用的很多)
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义
scala> a.foreach(println(_))
18000
20000
22000
过程:
2. 映射 Map
简介: 此部分做大数据用的最多,所以必须掌握哦
- map方法接收一个函数,将这个函数应用到每一个元素,返回一个新的集合
用法:
def map[B](f: (A) ⇒ B): TraversableOnce[B]
例子 将List列表中的全部 +1:
scala> val a = List(1,2,3,4) //定义一个列表
a: List[Int] = List(1, 2, 3, 4)
//方法1
scala> a.map(x => x+1) //全部+1
res34: List[Int] = List(2, 3, 4, 5)
//方法2 参数就一个 _ 代替 用的多
scala> a.map(_ + 1)
3. 扁平化映射 | flatMap (用的也很多)
- flatMap,可以理解为先map,然后再flatten
- map是将列表中的元素转换为一个Array
- flatten再将整个列表进行扁平化
方法签名
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): TraversableOnce[B]
例子:
例子:
1.有一个包含了若干个文本行的列表:"hadoop hive spark flink flume", "kudu hbase sqoop storm"
2.获取到文本行中的每一个单词,并将每一个单词都放到列表中
步骤
1.使用map将文本行拆分成数组
2.再对数组进行扁平化
3.使用flatMap简化操作
// 定义文本行列表
scala> val a = List("hadoop hive spark flink flume", "kudu hbase sqoop storm")
a: List[String] = List(hadoop hive spark flink flume, kudu hbase sqoop storm)
// 使用map将文本行转换为单词数组
scala> a.map(x=>x.split(" "))
res5: List[Array[String]] = List(Array(hadoop, hive, spark, flink, flume), Array(kudu, hbase, sqoop, storm))
// 扁平化,将数组中的
scala> a.map(x=>x.split(" ")).flatten
res6: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)
// 使用flatMap简化操作 用的最多 _ 通配符代替参数
scala> a.flatMap(_.split(" "))
res7: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)
4.过滤 | filter
- 过滤符合一定条件的元素
例子: 过滤掉奇数
scala> List(1,2,3,4,6,5,7,89,78,5,66,55).filter(_ % 2 == 0)
res39: List[Int] = List(2, 4, 6, 78, 66)