一.Scala的语言的函数式编程
Scala的中的函数:def 函数的名字(参数列表):返回值={函数题}
```scala
//实现word count 用spark
//将文件读取出来
sc.textFile("hdfs://bigdata111:9000/....")
//按空格切分
flatMap(_.split(" "))
//map是一个函数,拼接
map((_,1)
//reduce规约,函数
reduceByKey(_+_)
//搜集
collet
在scala中函数式编程,调用一系列函数
代码非常简洁,但是可读性比较差
val result = sc.textFile("hdfs://bigdata111:9000/....").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collet
```
二.高阶函数
在Scala中函数属于“头等公民”。
函数的定义可以像,定义一个变量的方式来定义,(值函数)
高阶函数:函数的参数是函数或函数的实现是函数
匿名函数
scala> (x:Int) => x*3
res0: Int => Int = <function1>
定义一个array数组,调用map函数
对每个数组值都乘以3:
scala> var array = Array (1,2,3,4,5,6,7)
array: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7)
//(x:Int) => x*3---简写-->_*3
scala> array.map(_*3)
res1: Array[Int] = Array(3, 6, 9, 12, 15, 18, 21)
对map的值进行拼接:
//(_,1)---->(x:Int) => (x,1)
scala> array.map((_,2))
res4: Array[(Int, Int)] = Array((1,2), (2,2), (3,2), (4,2), (5,2), (6,2), (7,2))
map会返回一个新的集合,但不改变原有的集合
scala> array.map((x:Int) =>x*3)
res2: Array[Int] = Array(3, 6, 9, 12, 15, 18, 21)
scala> array
res3: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7)
三.高阶函数:带函数参数的函数
scala
//自定义高阶函数
//对10做运算
切记:调用对应的函数,一定要导入对应的包
出错的案例:原因是因为没有导入math类的包
scala> def sumfun(func:(Double)=>Double)=func(10)
sumfun: (func: Double => Double)Double
scala> sumfun(sin)
<console>:13: error: not found: value sin
sumfun(sin)
导入包后:
scala> import scala.math._
import scala.math._
scala> sumfun(sin)
res6: Double = -0.5440211108893698
scala> sumfun(min)
<console>:16: error: type mismatch;
found : (Int, Int) => Int
required: Double => Double
sumfun(min)
^
scala> sumfun(sqrt)
res8: Double = 3.1622776601683795
scala>
```scala
foreach(println)
map():相当于循环,对集合每个元素,做操作(接受一个函数),返回一个新的集合
scala> var numbers=Array(1,2,3,4,5,6,7,8)
numbers: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
scala> numbers.map((i:Int)=>i*2)
res9: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16)
scala> numbers.map(_*3)
res11: Array[Int] = Array(3, 6, 9, 12, 15, 18, 21, 24)
map函数 List集合:
scala> numbers.map(_*3)
res11: Array[Int] = Array(3, 6, 9, 12, 15, 18, 21, 24)
scala> var numbers=List(1,2,3,4,5)
numbers: List[Int] = List(1, 2, 3, 4, 5)
scala> numbers
res12: List[Int] = List(1, 2, 3, 4, 5)
scala> numbers.map(_/2)
res13: List[Int] = List(0, 1, 1, 2, 2)
注意:map不改变原来的集合
会生成一个新的集合
scala> numbers.map(_/2)
res13: List[Int] = List(0, 1, 1, 2, 2)
scala> numbers
res14: List[Int] = List(1, 2, 3, 4, 5)
foreach函数:
scala> numbers.foreach(print)
12345
scala> numbers.foreach(println)
1
2
3
4
5
filter过滤函数:
scala> var numbers=List(1,2,3,4,5)
numbers: List[Int] = List(1, 2, 3, 4, 5)
scala> numbers.filter((i:Int)=>i%2 ==0)
res18: List[Int] = List(2, 4)
scala> numbers.filter(_%2 ==0)
res19: List[Int] = List(2, 4)
注意:返回以一个新的集合,不改变原来的集合
scala> numbers.filter(_%2 ==0)
res19: List[Int] = List(2, 4)
scala> numbers
res20: List[Int] = List(1, 2, 3, 4, 5)
————保持饥饿,保持学习
Jackson_MVP