Introducción: En el campo del big data, una gran cantidad de códigos comerciales de Spark / Flink utilizarán programación funcional, ¡así que esta parte es muy importante!
- Solo los siguientes métodos ~~~~
- Para cada
- Mapa
- Mapa plano
- Filtrar
- ¿Existe (existe)
- 排序 (sorted 、 sortBy 、 sortWith)
- Agrupación (groupBy)
- Cálculo agregado (reducir)
- Doblez
Explicación: en Scala, _ es un comodín
1. Atravesar cada uno
- La programación funcional de Scala utiliza el método foreach para recorrer e iterar . Puede hacer que el código sea más conciso.
方法:
集合对象.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
proceso:
2. Mapa
Introducción: esta parte es la más utilizada para big data, por lo que debes dominarla
- El método del mapa recibe una función, aplica esta función a cada elemento y devuelve una nueva colección
用法:
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. Mapeo plano | flatMap (también se usa mucho)
- flatMap se puede entender como mapa primero, luego aplanar
- map es convertir los elementos de la lista en una matriz
- aplanar y toda la lista se aplana
方法签名
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): TraversableOnce[B]
ejemplo:
例子:
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. Filtrar | filtrar
- Elementos filtrantes que cumplen determinadas condiciones
例子: 过滤掉奇数
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)