导航:首页 > 文件教程 > scala视频教程百度云

scala视频教程百度云

发布时间:2021-10-23 11:45:48

㈠ 如何学好Scala

Spark也是基于JVM,我们构筑分布式系统,借助JVM,而不一定是Java语言。 Spark和消息中间件KAFKA等都是用Scala编写的,学好Scala是掌握Spark的关键。
Scala基础语法入门实战
首先,参照相关攻略,在Linux下分别下载安装Java、Scala,然后配置Java和Scala环境变量。安装完毕,在终端敲入scala即可进入Scala命令行,如下所示:

root@Master:~# scala
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
Type in expressions to have them evaluated.
Type :help for more information.

简单测试
scala> 1+2
res0: Int = 3

scala> 1.5*2
res1: Double = 3.0

scala> 3*res1
res2: Double = 9.0

//按Tab键,命令自动补全
scala> res2.to
toByte toChar toDouble toFloat toInt toLong toShort toString

变量
var声明可变变量;val声明不可变变量。
val声明的不可变变量,不希望数据被改变,RDD内部的数据都是不可变,所以在Spark中一般都是使用val。

//下面声明了一个不可变变量result,result的值不可改变。
scala> val result=2+10
result: Int = 12

//假若修改result的值,会提示出错,如下:
scala> result=13
<console>:8: error: reassignment to val
result=13

//var声明可变变量:
scala> var name="Spark"
name: String = Spark

scala> name="Scala" //可以修改变量name的值
name: String = Scala

scala> name //name的值现在为Scala
res4: String = Scala

//val声明不可变变量
//age被声明为Int类型的不可变变量
scala> val age: Int=0
age: Int = 0

//声明为String类型
scala> val name:String=null
name: String = null

一行代码声明多个变量
scala> val age1,age2,age3=0
age1: Int = 0
age2: Int = 0
age3: Int = 0

基本数据类型的自动转换操作
Scala自己可以完成基本数据类型的自动转换操作。

//输入整数10,按Tab键盘,可以看见它本身的很多方法:
scala> 10.to
toByte toChar toDouble toFloat toInt toLong toShort toString

scala> 10.toString
res5: String = 10

scala> 0.to(5)
res6: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)
给了我们一个不可变的集合,获得的结果是:0~5,所以Scala一切皆对象!

Scala隐私转换:
当类型本身没有没有这个方法,但是又需要调用这个方法时,内部就会自动触发隐式转换。刚才的示例中,Int本身没有to这样的方法,Scala引擎内部会隐式自动转换成RichInt,就像上面0.to(5)这样的调用,RichInt对象类型才有to这样的函数。

scala> 1+1
res7: Int = 2

//因为Scala一切皆对象,所以以上示例又可以写成:
scala> 1.+(1)
res9: Double = 2.0
这个示例,内部其实就是Int的一个隐式转换,+是类的一个方法。

Scala没有++、---操作运算:
scala> var age=10
age: Int = 10

// Scala没有++、---操作运算
scala> age++
<console>:9: error: value ++ is not a member of Int
age++
^

//但是++运算可以用下面方式实现:
scala> age +=1

scala> age
res12: Int = 11

求最大、最小值
scala> min(20,4)
<console>:8: error: not found: value min
min(20,4)
^
该示例因为没有导入库,所以出错。

scala> import scala.math._ //导入math库
import scala.math._

scala> min(20,4)
res14: Int = 4

apply工厂构造实现方法
在Spark中,大量的实例的构造都是使用了apply方式。

scala> Array(1,2,3,4)
res15: Array[Int] = Array(1, 2, 3, 4)

scala> val array=Array(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)

//array是一个声明整数类型的数组变量, 其实内部是自动调用了Array.apply方法,等同如下:
scala> val array = Array.apply(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)

条件控制、循环
// if表达式示例:
scala> if(age>=18) "成年人" else "小孩"
res16: String = 成年人

scala> val result=if(age>=18) "成年人" else "小孩"
result: String = 成年人

scala> result
res17: String = 成年人

scala> val result = if(age>=18){
| "alt"
| buffered=10
| buffered
| }
以上一个代码块,代码块后面有个返回值buffered,代码块的返回值就是最后一行的值。

打印值
scala> println("Spark") //输出一行字符串并换行
Spark

scala> println("\nSpark") //换行,输出一行字符串再换行。\n是换行转义符。

Spark

scala> print("Spark") //输出一行字符串,不换行
Spark
scala>

填充占位符
scala> printf("%s是大数据框架的未来", "Spark") //%s是占位符
Spark是大数据框架的未来

读取内容
readLine用于读取输入的内容
scala> readLine //此时敲入Scala之后,然后回车
res28: String = Scala

scala> res28
res29: String = Scala

补充说明,readLine是一个方法,如果方法如果没有参数,那么可以不带括号,readLine()跟readLine效果一样。

循环

//声明一个可变变量,初始值为100
scala> var element=100
element: Int = 100

//while循环示例:
scala> while(element>90){
| println(element)
| element -= 1
| }
100
99
98
97
96
95
94
93
92
91

scala> 0 to element
res32: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90)

//for循环遍历并打印
scala> for(i<-80 to element) println(i)
80
81
82
83
84
85
86
87
88
89
90

//循环并增加条件判断
scala> for(i<-0 to element if i%2==0) print(i+" ")
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90

//for循环,并break退出
scala> import scala.util.control.Breaks._ //添加break引用
import scala.util.control.Breaks._

scala> for(i<-1 to 10){
| if(i==4) break
| println(i)
| }
1
2
3
scala.util.control.BreakControl

//循环,并return
scala> val n=5
n: Int = 5

scala> def f1:Any = {
| for(i <-1 to 10){
| if(i==n) return i
| println(i)
| }
| }
f1: Any

scala> f1
1
2
3
4
res1: Any = 5
解释以上代码块,def是定义一个函数。f1就是一个函数。

二、 Scala函数入门实战

函数示例
函数的定义使用def关键字,并且函数体最后有返回值。

//声明了一个函数f3,两个参数:param1是String类型,param2为Int类型。param2默认值为30,因为有了默认值,那么在调用上可以不传param2。
scala> def f3(param1:String, param2:Int=30) = param1 + param2
f3: (param1: String, param2: Int)String

//调用函数f3,传入第一个参数param1值为Spark,没有传入第二个参数,默认为30。
scala> f3("Spark")
res4: String = Spark30

//带名参数调用,即在函数调用时,显示指定参数名,并不按顺序传入。
scala> f3(param2=100, param1="Scala")
res5: String = Scala100

//变长参数, 定义了一个sum函数,参数numbers是变成参数,即传入的Int变量个数不定。在函数体中,对传入的全部Int变量进行循环遍历并累计求和,最后把结果返回。
scala> def sum(numbers: Int*)={var result=0; for(element<-numbers) result +=element; result}
sum: (numbers: Int*)Int

scala> sum(1,2,3,4,5,6,7,8,9,10)
res1: Int = 55

//下面示例是一个非常经典的语法
scala> sum(1 to 10: _*) // _* 表示提取里面的每个元素, 然后作为变长参数传递
res3: Int = 55

过程
没有返回值的函数就是过程。

//这是一个函数
scala> def morning(content:String) = "Good" + content
morning: (content: String)String

//这是一个过程
scala> def morning(content:String) { println( "Good" + content)}
morning: (content: String)Unit

㈡ 求一套spark,scala,hadoop视频教程

http://blog.csdn.net/qq_28767763/article/details/58595081

㈢ 学习scala有哪些好的资源

为什么学习函数式编程
在阅读DDD巨著《Patterns, Principles, and Practices of Domain-Driven Design》的过程中,Scott在第5章提到了使用函数式编程语言配合贫血模型去实践DDD的一种思路,这激发了我的无限遐想。
在开发领域,我们已经拥有了许多的抽象方法论和大量的实现技术。但我个人认为,这一切归根结底,都是人类思维在开发领域的具体表达方式。而人类在认识和分析所要解决的业务领域问题时,思考的内容不外乎由两个部分组成:『业务流程』与『业务规则』。前者,回答了业务活动中先做什么后做什么的问题;后者,则回答了遇到什么情况时应该怎么做的问题。两者结合后,得到我们需要的业务结果,或者叫作“实现业务目标”。
再想想目前学习和掌握的面向对象的一系列方法,又是如何将上述思维结果映射到中去的呢?我认为是这样的:
对于业务流程,我们将其表达为若干对象之间的合作,比如UML里序列图的对象与消息,进而具化为具体的类及其职责,比如类及其若干业务方法。
对于业务规则,我们将其表达为若干的判断逻辑,比如UML流程图里的判断分支,进而具化为业务方法里的if-else语句,或者再复杂一点,表达为工厂、策略等设计模式的实际运用。
然后,我认为,对于复杂业务规则的梳理,可以象数学归纳法一样进行演绎:假设一个函数y=f(x),给定x的定义域,确定y的值域。特别是在排列组合等方面的一些问题,也经常采用递归的方式来解决。所以,从这个角度讲,函数式编程更贴近人类思维习惯,所以让我自然而然地把目光转向了它。
为什么选择Scala
在选择具体的函数式编程语言时,我首先想到的是它最好是同时能支持面向对象编程的。因为即便LISP作为函数式编程语言的先祖,诞生已长达半个世纪,但单纯的函数式编程语言与面向对象编程语言相比,在抽象领域概念、组合系统模块、实现信息隐蔽等方面存在一定的差距,所以一直没有成为开发的主流。
信息隐蔽原理:在西安电子科大蔡希尧与陈平老师于1993年合作出版的《面向对象技术》一书中是这样描述的:把需求和求解的方法分离;把相关信息——数据结构和算法,集中在一个模块之中,和其他模块隔离,它们不能随便访问这个模块内部的信息。
其次,由于我的语言路线是从Pascal → C → C++ → C#,所以我希望能选择一种风格近似于C、强类型的函数式编程语言。在比较了F#、R、ErLang等几种常见的函数式编程语言之后,我最终选择了Scala。
Scala有何优势
注:以下内容,节选翻译或参考自《Programming in Scala》第1章、第3章,《Programming Scala》第6章,不算完整意义上的个人心得。
函数式编程的优势
纯的函数是没有副作用的。无论何时何地,对于一个函数y=f(x),给定x必定得到y,不会因此产生二义结果。因此无论对于代码测试还是并发,由于给定输入必定得到预期输出,而不受其他因素干扰,所以能有效减少Bug产生。
在函数式编程里,大量使用immutable的值。这意味着函数运算的结果总会创建一个新的实例,避免了通常并发环境下为防止数据共享冲突而采取的保护机制。尽管这需要额外的Copy操作,但Scala针对性地提供了高效的Copy实现,以及延迟计算等弥补机制。
函数是一等公民。函数作为表达式的一部分,可以借由函数之间的嵌套、组合,实现复杂的判断逻辑。
Scala语言本身的优势
Scala是面向对象与函数式编程的混合语言,所以能有效结合二者的优点。
Scala属于Java生态圈,可以在JVM上与Java一起编译运行,所以许多Java的框架、工具都可以直接应用于Scala语言编写的项目。
Scala视一切数据类型皆为对象,且支持闭包、lambda、by-name参数等特性,语法简洁明快。
Scala使用Actor作为并发模型,与Akka框架自然契合。这是一种区别于传统的、基于数据共享、以锁为主要机制的并发模型,其特点在于以Actor为基本单位、没有数据共享、基于消息传递实现Actor之间的协作,因此可以有效避免死锁、减少竞争。
最后,如果有朝一日要转向大数据领域,有Spark这样的大型框架作为支撑。知乎:与 Hadoop 对比,如何看待 Spark 技术?
Scala对实践DDD有何意义
说了那么多,我的根本目的还是要将Scala作为实现DDD的主要武器。那么试想一下,Scala在我们实现DDD的过程中能有哪些帮助呢?我暂且胡侃乱诌如下:
表示值对象、领域事件等元素更直观。值对象、领域事件在DDD里都应该是immutable的,以往多采取POCO形式表示,现在改用Scala里的val以及case class表示,在语法层面就直观地表明是不可修改的。
在类的方法层面实现CQRS时有语法支持。用Scala里的Function(返回类型为非Unit)对应CQRS里uery,保证类的方法没有副作用;用Procere(返回类型为Unit)对应CQRS里的Command,明确表明这一类方法会产生修改状态等副作用。这同样从语法层面就能对二者进行明确区分。
模式匹配丰富了函数操作。除了正则表达式,Scala形式多样的模式匹配语法,为提取数据、完成数据分组聚合等运算、实现逻辑判断提供了强大支持。比如定义def sum_count(ints:Seq[Int) = (ints.sum, ints.size)这样一个函数后,我们可以这样调用,以得到一个1至6的整数序列的整数值合计,及该序列的尺寸:val(sum, count) = sum_count(List(1, 2, 3, 4, 5, 6))。
为实现DSL提供有力支持。Scala自带有解析框架,加上灵活的函数语法支持,要自己实现一套DSL及其相应的语法解析器将不再困难。比如在配置文件里这样的一条配置语句,表示退休条件为年龄达到60周岁或者工龄届满30年:retire = (Age >= 60) || (ServiceLength >= 30)。以往的方式是自己写一个语法解析器,把这条文本转换成相应的Specification对象,然后扔给聚合去使用。现在有了Scala的帮助,就使编写语法解析器这一环节的工作量大大减少。
合理的高阶函数设计,使规则编写得到简化。比如规则、费用报销规则,以往可能需要若干层的if-else嵌套,现在则将通过高阶函数得到大幅简化。对此,我强烈刘光聪先生的Refactoring to Functions,你会在刘先生的重构过程中发现高阶函数的强大。
Actor为高效并发打下基础。Actor
内部完全自治,自带用于存储消息的mailbox,与其他Actor只能通过消息进行交互,每个Actor都是并发的一个基本单位。这些特点,非常适合于
采取Event
Sourcing方式实现的DDD。每个聚合都好比一个Actor,在聚合内部始终保持数据的强一致性,而在聚合之间交互的领域事件则好比Actor之间
的消息,聚合之间借由领域事件和Saga保证数据的最终一致性。
Trait成为AOP利器。Trait是Scala的另一大特色,它就象AOP织入一样,能动态地给某个类型注入方法或者结构。比如配合类Circuit和with后面那4个Trait的定义,val circuit = new Circuit with Adders with Multiplexers with Flipflops with MultiCoreProcessors这样就创建了一个带有加法器、乘法器、触发器和多核处理器的元件。
隐式实现为类型扩展提供支持。对应C#里的静态扩展方法,Scala通过implicit为实现数据类型的方法扩展提供了便捷,成为Trait之外的另一个功能扩展手段。
能降低常见BDD框架的学习成本。尽管这一点可能比较牵强,但我正在努力摸索如何将BDD与DDD结合,而常见的Cucumber、Spock等一些BDD框架,其语法与Scala比较相近,所以我才有如此一说。
有哪些Scala学习资料
以下是我目前主要的学习资料,并衷心欢迎各位留言补充。
书籍
Programming in Scala:由Scala语言的设计师Martin Odersky编写,循序渐进,配合了大量实例,入门必读吧。
Programming Scala:视角与上面那本有点不一样,没有Scala语言基础会感觉很困难,适合掌握了基本语法后温故而知新。
在线文档与
Scala 官方文档:Scala的,作为寻找资料的出发点是不错的。
Scala 课堂:中文版的Scala基本语法在线课堂。
Scala Synatax Primer:由Jim McBeath整理的Scala语法概要,可以当字典用。
The Neophyte’s Guide to Scala:很出名的一个Scala入门指南,以Scala中的提取器Extractor作为实例开始。
Scala 初学指南:这是上面那本指南的中译本。
Effective Scala:中文版的Scala高效编程
SBT中文入门指南:Scala Build Tool
社区
Scala 中文社区:不算活跃,原因你懂的。
Scala User:Scala入门者聚集地,没有Stack Overflow那么严格,但也需要点爬墙的身手。
SDK及IDE
Java SE:先装这个
Scala SDK:再装这个
SBT:然后装这个
IntelliJ IDEA:最后装这个,就能比较方便地开始Scala编程了
写在最后

近读的书很多也很杂,DDD、BDD、Scala、Cucumber以及Java基础等等都有涉及,真恨不得一口吃成个大胖子。由于时间和精力有限,所以
现在知识消化很成问题,迟迟没有进入学以致用的环节,只能先这样纸上谈兵了,好歹先把自己在学习过程中的一些思考、看到的好东西先记载下来,以备将来之
需。

㈣ 初学scala,我希望大神解答

ClassObject.count 使得ClassObject.numcount 为2
new ClassObject().addNum 中类实例的num 为4,使得ClassObject.numcount 为4,addNum 返回 5
new ClassObject().numcount1 中类实例首先调用ClassObject.count,使得 ClassObject.numcount 为6,因此numcount1 为6
同上面的道理,再次new ClassObject().numcount1 ,为8

原理就是类构造函数会对类定义中的所有可运行部分执行,例如ClassObject类,每次构造都会调用:
private var num = ClassObject.count
var numcount1 = ClassObject.numcount
引发类伴生对象中numcount 的变化

㈤ 哪里有Scala视频教程下载

推荐学习摇摆少年梦老师的《国内首部系统性介绍Scala语言培训课程》

㈥ scala代码下载

你要学习scala,但是没必要看源码吧。
https://github.com/scala/scala 这里是官方源码,你可以下载看
但是你要学习scala,可以看官方API,http://www.scala-lang.org/api/current/
或者是一些公开课
在coursera上面有scala的公开课,比较权威的https://www.coursera.org/course/progfun

㈦ 谁有scala的中文教程

可以到 scala中文社区http://www.cnscala.com/index.php 关注

㈧ 谁有scala视频课程

个人觉得,目前最好的Scala视频是“DT大数据梦工厂”的Scala视频,他们每天都会发布至少一个精简的视频出来,跟着学习挺有收货的。希望能帮到你,谢谢!

㈨ 求Scala视频

王家林老师录制了中国第一套Scala视频,可以参考学习,同时王家林老师在Spark、Hadoop、Android等方面有丰富的源码、实务和性能优化经验。彻底研究了Spark从0.5.0到0.9.1共13个版本的Spark源码,并已完成2014年5月31日发布的Spark1.0源码研究。
他同时还是Hadoop源码级专家,曾负责某知名公司的类Hadoop框架开发工作,专注于Hadoop一站式解决方案的提供,同时也是云计算分布式大数据处理的最早实践者之一;

阅读全文

与scala视频教程百度云相关的资料

热点内容
小米2s升级miui7耗电 浏览:837
文件资源管理器最近使用文件找不到 浏览:539
sublimetext文件名乱码 浏览:792
安徽宝德网络技术 浏览:44
计算机编程编码怎么回事 浏览:802
订阅号的文件在哪里找 浏览:850
dw图片左右切换代码 浏览:943
ppt文件磁盘损坏怎么修复工具 浏览:632
服务器备份和恢复出厂设置密码 浏览:837
win10处于通知模式如何激活 浏览:162
电脑f盘文件有锁 浏览:55
iphone6配置差 浏览:365
榆柳网络科技是什么App 浏览:851
旅游大数据建设方案 浏览:161
谷道网络技术有限公司 浏览:513
小米电视不能识别u盘apk文件 浏览:390
如何将摄像头的数据变高清 浏览:581
西青大数据 浏览:457
2016支付宝vs微信 浏览:745
移动g2f怎么进入3g网络 浏览:435

友情链接