大数据系列第三课:scala中阶
2016-01-04 07:04
543 查看
第一阶段:Spark streaming、spark sql、kafka、spark内核原
理(必须有一个大型项目经验);
第二阶段:spark运行的各种环境,各种故障的解决,性能 优化(精通spark内核、运行原理);
第三阶段:流处理、机器学习为鳌头,需要首先掌握前两个 阶段的内容;
跟随王家林老师的零基础讲解,注重动手实战,成为spark高手,笑傲大数据之林!
第一部分:学习笔记
本期内容:
1 Scala中函数式编程彻底详解
2 Spark源码中的Scala函数式编程
3 案例和作业
一、函数、高阶函数
1、最基础函数,函数不依赖类、对象,可以作为一等公民进行赋值。
2、匿名函数:参数名称 =(参数:类型)=> 函数体
一般会将匿名函数赋值给一个变量。
3高阶函数: (1)函数参数也是函数(函数作为一等公民可以赋值给变 量,也可以作为函数的参数)
(2)高阶函数返回值也有可能为函数
4、高阶函数返回值也有可能为函数
高阶函数可以自动推导出参数的类型,在函数的作用的函数体内只使用一次函数输入参数值,我们可以将输入函数的名称省略掉,用“_”代替。
二、闭包
Scala为我们当前的对象隐式生成一个对象,此对象可以重新再传入使用。
三、Curring
1、Curring的函数被应用于多个参数列表,而非仅仅一个
这里当我们调用plainOld时,实际上连接调用了两个传统函数,第一个函数调用带单个的名为x的Int参数,并返回第二个函数的函数值,第二个函数带Int参数y.。
四、List集合操作
从集合list的角度讲,包含flatmap、map、filter、zip、listBuffer等(immutable,mutable)的操作。
第二部分:作业
统计一个目录下所有单词出现的总次数
理(必须有一个大型项目经验);
第二阶段:spark运行的各种环境,各种故障的解决,性能 优化(精通spark内核、运行原理);
第三阶段:流处理、机器学习为鳌头,需要首先掌握前两个 阶段的内容;
跟随王家林老师的零基础讲解,注重动手实战,成为spark高手,笑傲大数据之林!
第一部分:学习笔记
本期内容:
1 Scala中函数式编程彻底详解
2 Spark源码中的Scala函数式编程
3 案例和作业
一、函数、高阶函数
1、最基础函数,函数不依赖类、对象,可以作为一等公民进行赋值。
def fun1(name:String){println(name)} val fun1_v = fun1 _ fun1("Spark")
2、匿名函数:参数名称 =(参数:类型)=> 函数体
一般会将匿名函数赋值给一个变量。
val fun2 = (content:String) =>println(content) fun2("Hadoop")
3高阶函数: (1)函数参数也是函数(函数作为一等公民可以赋值给变 量,也可以作为函数的参数)
(2)高阶函数返回值也有可能为函数
val hiScala = (content:String) =>println(content) //定义函数 def bigData(func:(String) =>Unit,content:String){func(content)} //第一个参数是一个String类型字符串,返回类型Unit bigData(hiScala,"Spark") //调用函数 val array =Array(1,2,3,4,5,6,7,8,9) array.map(item =>2*item) array.map(item =>println(item)) //打印出1到9
4、高阶函数返回值也有可能为函数
def func_Returned(content:String) = (message:String) =println(message) //func_Returned本身返回字符串类型 func_Returned("Spark") res:String =>Unit = <function1> //输入类型Strin,返回Unit =function1 为一个函数 val returned = func_Returned("Spark") returned("Scala")
高阶函数可以自动推导出参数的类型,在函数的作用的函数体内只使用一次函数输入参数值,我们可以将输入函数的名称省略掉,用“_”代替。
def spark(func:(String) =>Unit,name:String){func(name)} //调用第一个参数(函数func),第二个参数为String(name) spark((name:String) =>println(name),"Scala") spark(println(_),"Scala") //只用一个参数的话,可以省略() spark(println _,"Scala") //必须有空格 spark(println,"Scala") array.map(2*_) array.map(2*_).foreach(println(_)) //只有一个元素,可以省略(),下面两个等价 array.map(2*_).foreach(println _) array.map(2*_).foreach(println) array.map(2*_).filter(_ >10).foreach(println)
二、闭包
Scala为我们当前的对象隐式生成一个对象,此对象可以重新再传入使用。
//定义函数,闭包的形式 def scala(content:String) = (message:String) =>println(content+":"message) val func3 = scala("Spark") func3("Flink") //Spark作为content传入值,依旧可以传入值Flink
三、Curring
1、Curring的函数被应用于多个参数列表,而非仅仅一个
def plainOld(x:Int,y:Int) =x+y def plainOld(x:Int)(y:Int) =x+y
<p>plainOld(1)(3) //<span style="font-family:宋体;">调用函数</span></p>
这里当我们调用plainOld时,实际上连接调用了两个传统函数,第一个函数调用带单个的名为x的Int参数,并返回第二个函数的函数值,第二个函数带Int参数y.。
四、List集合操作
从集合list的角度讲,包含flatmap、map、filter、zip、listBuffer等(immutable,mutable)的操作。
(immutable,mutable)的操作 val list = List("Scala","Spark","Flink") val call =list.map("The content is :" + _) list.map(println) call.flatmap(_.split(" ")) //以空格进行切分,返回List[String] call.flatmap(_.split(" ")).foreach(println) //遍历打印切分后的List list.zip(List(10.4.6)) //进行拉链操作,返回List[(String,Int)] 1 to 100
第二部分:作业
统计一个目录下所有单词出现的总次数
import scala.io.Source import java.io._ import scala.collection.mutable /** * @author css-kxr */ class DT_my3 { //通过aggregate来实现map reduce,效率更高 val lines = Source.fromFile("c:/hello.txt").getLines()foreach(println) val seqop = (result: mutable.HashMap[String, Int], line: String) => { val wordcount = line.replace(",", " ").replace(".", " ").replace("(", " ").replace(")", " ").split(" ").filter(_.trim.length > 0).map(word => (word, 1)) wordcount.foreach(count => { val addOne = (count._1, result.getOrElse(count._1, 0) + count._2) result += addOne }) result } val combop = (result1: mutable.HashMap[String, Int], result2: mutable.HashMap[String, Int]) =>result1 ++= result2 val test = lines.aggregate(mutable.HashMap[String, Int]())(seqop, combop) println(test) }
相关文章推荐
- [Android Pro] 网络流量安全测试工具Nogotofail
- VT-x is not available (VERR_VMX_NO_VMX) 的解决方案
- OC对象的retainCount(引用计数器)
- 专访CMU邢波教授:机器学习与医疗大数据,及大规模机器学习系统的开发
- 2016年最值得关注的大数据领域33大预测
- 2016年最值得关注的大数据领域33大预测
- VMfailVaild 错误号
- 【science封面文章】Human-level concept learning through probabilistic program induction
- 大数据系列第三课:scala基础
- LeetCode之Climbing Stairs与斐波那契数列的联想
- HDFS基本命令
- KMP字符串模式匹配详解http://blog.csdn.net/lin_bei/article/details/1252686
- 被颠覆的购物者:穿越喧嚣的零售业
- Develop--Training(六)Getting Started--Working with System Permissions
- POJ 2135 Farm Tour && HDU 2686 Matrix && HDU 3376 Matrix Again 费用流求来回最短路
- 被颠覆的购物者:穿越喧嚣的零售业
- 彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误
- 在不同版本号hdfs集群之间转移数据
- Installation error: INSTALL_FAILED_NO_MATCHING_ABIS
- RAID原理以及分类