发现高阶函数的小秘密(一)

 

一.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
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperBigData~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值