如何快速学习Scala
大数据学习过程中,会学习非常多的技术,但SCALA无疑是必不可少,那我们在大数据技术的学习过程中,如何快速的认识scala,并且学习它,感谢科多大数据公司的余老师提供的详细素材,本人整理成章,希望对你们有帮助。
众所周知,Spark支持4门语言,分别为R、Python、Java与Scala,但真正的底层实现语言则是Scala。在我以往的实践分享中,除了Python,我还会利用Scala去实践一遍,而且在面对大规模的数据建模中,我都会推荐去使用Hadoop、Spark去工程开发,充分利用集群的计算资源。本文让大家快速了解Scala,并且学会如何学习和使用Scala。
一、哪些人群适合学习Scala?
你必须要有清晰的职业发展规划,而不是追逐着潮流去乱学一通,要学以致用,而不是学非所用!
因此,如果你定位是成为一名大数据开发工程师、数据应用架构师 的话,你需要去了解,更要往底层深入的学习!
如果你定位是成为一名ETL工程师、数据挖掘工程师 的话,你需要去了解,更要往实践应用去学习!
除此之外,我并不建议你花心思去折腾它,毕竟你工作场景中也使用不到。
二、哪个阶段适合学习Scala?
我并不支持一上来就直接去学习它,因为不积跬步无以至千里,我更希望你有一定Python或者java的基础,再了解一些Hadoop/Spark的应用,才能更好,更快去上手,而不是陷入一种困惑:”我学它到底有什么用?”。
对于学习顺序,建议java-hadoop-hive-hbase-flume-kafka-storm-scala-spark
三、使用Scala有什么优势?
学习它并不是让你在面试时候能够装一装,因为如果只懂皮毛,反而是弄巧成拙,那就不好了。
学习它的初衷,是因为实际工作场景中有需要,平台集群环境所决定,用合适的工具做正确的事,仅此而已。
就我目前的体验来看,它肯定比Python、R这类语言更适合大规模数据的工程开发,更符合线上挖掘业务的生产使用。它也比MapReduce、Java这类语言更简洁,更高效去开发,而且能提高计算效率。
当然,技术不局限于只固定使用一种语言,而是从业务和环境角度,灵活选择合适的语言去开发,让技术服务于业务。
四、如何能学习上Scala?
可以选择购买一些相关书籍,或者在线上寻找学习资源,这类资源都非常多,但无经验的小伙伴,尤其是0基础,还是建议系统学习,可以自学也可以选择靠谱的培训机构
五、哪些知识需要掌握?
除了参考网络的学习资料外,这里分享一些必要的基础知识介绍,便于你聚焦学习方向。
① 语言的背景(了解)
scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。
scala是纯粹的面向对象的语言。java虽然是面向对象的语言,但是它不是纯粹的,因为java的基本数据类型不是类,并且在java中还有静态成员变量和静态方法。相反,scala是纯粹面向对象的,每个值都是对象,每个操作都是方法调用。
scala也是一个成熟的函数式语言。函数式编程有两个指导思想:
a. 函数是头等值,也就是说函数也是值,并且和其他类型(如整数、字符串等)处于同一地位,函数可以被当作参数传递,也可以被当作返回值返回,还可以在函数中定义函数等等;
b. 程序的操作应该把输入值映射为输出值而不是就地修改,也就是说函数调用不应产生副作用,虽然函数式编程语言鼓励使用“无副作用”的方法,但是scala并不强制你必须这么做。
scala允许你使用指令式的编程风格,但是随着你对scala的深入了解,你可能会更倾向于一种更为函数式的编程风格。向函数式编程转变,你就应该尽量去使用val、不可变对象、无副作用方法,而不是var、可变对象、有副作用方法。要明白的是,从指令式编程向函数式编程的转变会很困难,因此你要做好充分的准备,并不断的努力。
scala运行于JVM之上,并且它可以访问任何的java类库并且与java框架进行互操作,scala也大量重用了java类型和类库。
② 使用IDE实现Hello Scala(实践)
除了Scala解释器外,我更常用IDE去开发,比如利用已部署好的环境,开发一个Demo程序。
object Demo { def main(args: Array[String]) {
println("Hello Scala.")
}
}
其中,有几个写法的注意事项,需要你去了解的,具体如下所示:
01. 在scala中,语句之后的“;”是可选的。当有多个语句在同一行时,必须加上分号,但不建议把多个语句放在一行。
02. 建议使用2个空格作为代码缩进,常规的朋友会倾向于一个Tab键。
03. Scala的索引也是从0开始的,但是元祖从1开始。
04. 不管是Import方法,还是匹配,使用 _ 相当于Java中的 * 作用。
③ Scala的数据类型(常用)
它有7种数值类型:Byte、Char、Short、Int、Long、Float和Double,以及2种非数值类型:Boolean和Unit(只有一个值“()”,相当于java和c++中的void,即空值)。
这些类型都是抽象的final类(不能使用new新建,也不能被继承),在scala包中定义,是对java基本数据类型的包装,因此与java基本数据类型有相同的长度。
另外,scala沿用了java.lang包中的String。在scala中,常量也称作字面量,字符串字面量由双引号包含的字符组成,同时scala提供了另一种定义字符串常量的语法——原始字符串,它以三个双引号作为开始和结束,字符串内部可以包含无论何种任意字符。
在scala中,我们使用方法,而不是强制类型转换,来做数值类型之间的转换,如99.44.toInt、97.toChar。
④ Scala的变量类型(常用)
它有两种变量:val和var。val如同java中的final变量,var如同java中的非final变量。
由于scala是完全面向对象的,因此val和var只是声明了对象的引用是不可变的还是可变的,并不能说明引用指向的对象的可变性。
声明变量的同时需要初始化之,否则该变量就是抽象的。如果不指定变量的类型,编译器会从初始化它的表达式中推断出其类型。
当然你也可以在必要的时候指定其类型,但注意,在scala中变量或函数的类型总是写在变量或函数的名称的后边。
val str : String = “Hello Scala.”
⑤ Scala的控制结构(常用)
它与其他编程语言有一个根本性差异,也就是几乎所有构造出来的语法结构都有值,从而使得程序结构更加精简。
它内建的控制结构很少,仅有if、while、for、try、match和函数调用等而已,所以熟悉这几类就足够了。如此之少的理由是,scala从语法层面上支持函数字面量。
另外,scala中没有break和continue语句,如果有需要类似功能,可以间接性去实现,如使用Boolean的控制变量、嵌套函数等。
⑥ Scala的函数定义(常用)
定义函数时,除了递归函数之外,可以省略返回值类型声明,它会根据=号后边的表达式的类型推断返回值类型,同时=号后边表达式的值就是函数的返回值,你无需使用return语句。
因为它推荐你使用表达式值代替return返回值,当然根据需要,也可以显式使用return返回值。
def getNowDate():String={ var now:Date = new Date() var dateFormat:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd") var todatTime = dateFormat.format(now) todatTime }
以上函数的意思是为了获取当前日期,如今天2018-10-19。而对于递归函数必须指定返回值类型,如下斐波拉契数列所示:
def fac(n: Int) : Int = if(n <= 0 ) 1 else n * fac(n-1)
最后,如果没有函数值返回,则默认返回值是Unit。
⑦ Scala的异常处理(常用)
它与java的类似,但也有区别,如它不需要提前声明函数、方法可能会抛出的某种异常。而且throw、try-catch-finally表达式都是有值的,当没抛异常时,try处为表达式的值;当抛异常被捕获时,catch处为表达式的值;当抛异常没被捕获时,就没有返回值;finally处计算得到表达式值,不过它常用于处理 关闭文件、连接 等。
也就是说,如果你想快速入门Scala这么语言,能够去实践开发一些小模型,数据处理逻辑,等等。那上面这7点知识,基本囊括了你短期学习的方向,而更深入的知识点,可以在后期查缺补漏,结合实际场景去调研,去学习,去使用。
更多学习资料,可以给我留言
六、学好Scala的核心关键?
这也是学习任何一门语言,甚至是手艺的通用方法,这里很简化去概括,更多细节需要慢慢去体会。
第一点:必要的基础打扎实;
第二点:多寻找开发场景去实践,目的是为了练手、遇到新问题、锻炼解决问题的能力;
第三点:遇到开发困难,先理清瓶颈在哪里?再多搜索网络资料针对性去解决;
第四点:完整去开发一个全流程的数据项目,甚至是业务场景模型,把零散知识贯穿起来;
道理可能大家都懂,但是方法一定要选择正确,才能事半功倍。
如何快速学习Scala的更多相关文章
- 快速了解Scala技术栈
http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为 ...
- 60分钟Python快速学习(给发哥一个交代)
60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...
- LinqPad工具:帮你快速学习Linq
LinqPad工具:帮你快速学习Linq 参考: http://www.cnblogs.com/li-peng/p/3441729.html ★:linqPad下载地址:http://www.linq ...
- 快速学习C语言一: Hello World
估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...
- 学习Scala第一篇-从hello World开始
最近开始系统性的学习scala.其实之前使用过scala的,比如我在用Gatling这款性能测试工具的时候就接触到了scala了.Gatling本身就是用Scala写的,而且Gatling的性能测试配 ...
- 怎样学习Scala泛函编程
确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...
- 学习Scala: 初学者应该了解的知识
Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...
- 【Java线程池快速学习教程】
1. Java线程池 线程池:顾名思义,用一个池子装载多个线程,使用池子去管理多个线程. 问题来源:应用大量通过new Thread()方法创建执行时间短的线程,较大的消耗系统资源并且系统的响应速度变 ...
- 【Java的JNI快速学习教程】
1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口. 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时 ...
随机推荐
- ios技术篇:导航栏push遵循的三个规则
1.如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮 2.如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自 ...
- JS的prototype和__proto__(含es6的class)
JS的prototype和__proto__(含es6的class) 一.prototype和__proto__的概念 prototype是函数的一个属性(每个函数都有一个prototype属性),这 ...
- Java 之递归遍历目录
Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java package cn.com.zfc. ...
- win7 wamp 64位 php环境如何开启curl服务?
这篇文章主要介绍了PHP简单开启curl的方法,较为详细的讲述了PHP开启curl函数库的具体步骤与相关注意事项,需要的朋友可以参考下 本文讲述了PHP简单开启curl的方法.分享给大家供大家参考,具 ...
- 基于Python的SQLAlchemy的操作
安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...
- Spark MLlib 之 StringIndexer、IndexToString使用说明以及源码剖析
最近在用Spark MLlib进行特征处理时,对于StringIndexer和IndexToString遇到了点问题,查阅官方文档也没有解决疑惑.无奈之下翻看源码才明白其中一二...这就给大家娓娓道来 ...
- 封装PHP验证码方法
/** * 生成验证码 * @param integer $width 图片宽度 * @param integer $height 图片高度 * @param string $type 验证码类型 * ...
- Sallen-Key Active Butterworth Low Pass Filter Calculator
RC 2nd Order Passive Low Pass Filter The cut-off frequency of second order low pass filter is given ...
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局
一.新建android工程的时候eclipse没有生成MainActivity和layout布局 最近由于工作上的原因,开始学习Android开发,在入门的时候就遇到了不少的坑,遇到的第一个坑就是&q ...
- Java知识回顾 (5)数组、日期与时间, StringBuffer和StringBuilder
一.数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. dataType[] arrayRefVar; // 首选的方法 或 dataType arra ...