本节主要内容

  1. Scala简单介绍
  2. 为什么要学习Scala
  3. Scala语言初步

1. Scala简单介绍

Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言。既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Odersk于2001开发。2004年開始程序执行在JVM与.Net平台之上。由于其简洁、优雅、类型安全的编程模式而受到关注。



Scala的创建者——Martin Odersk

在Scala的创建之初,并没有怎么引起重视,随着Apache Spark和Apache Kafka这样基于Scala的大数据框架的崛起,Scala逐步映入大数据从业者的眼帘。

Scala的拥护者们觉得Scala的主要优势是速度和它的表达性。眼下使用scala的作为支撑公司开发语言的包含Foursquare和Twitter。2009年Twitter把大部分后台系统的开发语言从Ruby换成了Scala。參见这篇文章:Twitter on Scala: A Conversation with Steve Jenson, Alex Payne, and Robey Pointer,” Scalazine, April 3,2009, www.artima.com/scalazine/articles/twitter_on_scala.html.

Scala语言具有例如以下特点:

1 纯面向对象编程语言

  • (1) Encapsulation/information hiding.
  • (2)Inheritance.
  • (3)Polymorphism/dynamic binding.
  • (4)All predefined types are objects.
  • (5) All operations are performed by sending messages to objects.
  • (6)All user-defined types are objects.

2 函数式编程语言

定义:Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

函数式编程语言应支持以下特性:

(1)高阶函数(Higher-order functions)

(2)闭包( closures)

(3)模式匹配( Pattern matching)

(4)单一赋值( Single assignment )

(5)延迟计算( Lazy evaluation)

(6)类型推导( Type inference )

(7)尾部调用优化( Tail call optimization)

(8)类型推导( Type inference )

3 Scala语言具有非常强的兼容性、移植性

Scala执行于JVM上,能够与JAVA进行互操作,具有与JAVA一样的平台移植性

4 Scala语法的简洁

以下给的是java的hadoop wordcount代码及spark wordcount代码



能够看到,spark三行代码就攻克了hadoop 七八十行代码做的事情。

2. 为什么要学习Scala

1 开源大数据内存计算框架Spark的流行

  • Spark是当前最流行的开源大数据内存计算框架。採用Scala语言实现,由UC 伯克利大学AMPLab实验室开发(2009)并于2010年开源,在2014年成为Apache基金会的顶级项目http://spark.apache.org/
  • Spark有着非常好的性能优势。



    图片来源:databricks.com/blog/2014/11/05/spark-officiallysets-a-new-record-in-large-scale-sorting.html
  • 社区活跃度



    图片来源:Real-Time Analytics with Spark Streaming



    图片来源:Spark Summit 2015



    图片来源:twitter.com/dberkholz/status/568561792751771648

  • 各大公司使用与贡献情况



图片来源:Summit Spark 2015 https://spark-summit.org/2015/

- IBM 百万数据project师计划

【2015年6月17日,北京】IBM(NYSE:IBM)宣布承诺大力推进Apache Spark项目,并称该项目为:在以数据为主导的,未来十年最为重要的新的开源项目。这一承诺的核心是将Spark嵌入IBM业内率先的分析和商务平台。并将Spark作为一项服务,在IBM Bluemix平台上提供给客户。IBM还将投入超过3500名研究和开发者在全球十余个实验室开展与Spark相关的项目,并将为Spark开源生态系统无偿提供突破性的机器学习技术——IBM SystemML,同一时候,IBM还将培养超过100万名Spark数据科学家和数据project师。原文链接:http://www.csdn.net/article/a/2015-06-18/15825412

2 Scala是未来大数据处理的主流语言

  • 它是Spark框架的开发语言
    • ”If I were to pick a language to use today other than Java, it would be Scala.” —James Gosling



      詹姆斯·高斯林 Java之父
  • Scala具有数据处理的天然优势(语言特点决定)

3. Scala语言初步

1 变量定义

//声明一个val变量
//与java final关键字声明的变量一样
//一旦被赋值。便不能更改
//Scala会帮我们进行类型判断
scala> val helloString="Hello World"
helloString: String = Hello World //也能够进行类型指定
scala> val helloString:String="Hello World"
helloString: String = Hello World //String事实上就是java.lang.String
scala> val helloString:java.lang.String="Hello World"
helloString: String = Hello World //不能被又一次赋值。由于它是val变量
scala> helloString="Hello Crazy World"
<console>:8: error: reassignment to val
helloString="Hello Crazy World"
^

以下给出的延迟载入变量:

//lazy关键字声明变量
//表示该变量不会立即赋值
//而在真正被使用时才赋值
scala> lazy val helloString="Hello Crazy World"
helloString: String = <lazy> //在真正使用时被赋值
scala> helloString
res1: String = Hello Crazy World

scala中也存在可变变量。即随着程序的执行,变量内容能够动态变化:

//var 声明可变变量
scala> var helloString="Hello Cruel World"
helloString: String = Hello Cruel World //又一次赋值
scala> helloString="GoodBye Cruel World"
helloString: String = GoodBye Cruel World

2 函数初步

scala中通过下列方式进行函数定义:

//定义了一个函数,函数中使用return返回结果
scala> def add(a:Int,b:Int):Int={return a+b}
add: (a: Int, b: Int)Int scala> add(1,2)
res3: Int = 3 //能够省去return,scala会将最后一个执行语句
//作为函数的返回值
scala> def add(a:Int,b:Int):Int={a+b}
add: (a: Int, b: Int)Int //省去返回值类型。scala会自己主动进行类型判断
scala> def add(a:Int,b:Int)={a+b}
add: (a: Int, b: Int)Int scala> add(1,2)
res4: Int = 3

3 HelloWorld应用程序:

package cn.xtwy.scala.chapter01

//scala应用程序相同採用main方法作为应用程序的入口
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}

加入公众微信号。能够了解很多其它最新Spark、Scala相关技术资讯

Scala入门到精通——第一节 Scala语言初步的更多相关文章

  1. Scala入门到精通

    原文出自于: http://my.csdn.net/lovehuangjiaju 感谢! 也感谢,http://m.blog.csdn.net/article/details?id=52233484 ...

  2. SaltStack入门到精通第一篇:安装SaltStack

    SaltStack入门到精通第一篇:安装SaltStack 作者:纳米龙  发布日期:2014-06-09 17:50:36   实际环境的设定: 系统环境: centos6 或centos5 实验机 ...

  3. Scala入门到精通——第二十四节 高级类型 (三)

    作者:摆摆少年梦 视频地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本节主要内容 Type Specialization Man ...

  4. Scala入门到精通——第十五节 Case Class与模式匹配(二)

    本节主要内容 模式匹配的类型 for控制结构中的模式匹配 option类型模式匹配 1. 模式的类型 1 常量模式 object ConstantPattern{ def main(args: Arr ...

  5. Scala入门到精通——第二十九节 Scala数据库编程

    本节主要内容 Scala Mavenproject的创建 Scala JDBC方式訪问MySQL Slick简单介绍 Slick数据库编程实战 SQL与Slick相互转换 本课程在多数内容是在官方教程 ...

  6. Scala入门到精通——第十六节 泛型与注解

    本节主要内容 泛型(Generic Type)简单介绍 注解(Annotation)简单介绍 注解经常使用场景 1. 泛型(Generic Type)简单介绍 泛型用于指定方法或类能够接受随意类型參数 ...

  7. Scala入门到精通——第十九节 隐式转换与隐式參数(二)

    作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式參数中的隐式转换 函数中隐式參数使用概要 隐式转换问题梳理 1. 隐式參数中的 ...

  8. Scala入门到精通——第二十七节 Scala操纵XML

    本节主要内容 XML 字面量 XML内容提取 XML对象序列化及反序列化 XML文件读取与保存 XML模式匹配 1. XML 字面量 XML是一种很重要的半结构化数据表示方式,眼下大量的应用依赖于XM ...

  9. Scala入门到精通——第二十二节 高级类型 (一)

    作者:摇摆少年梦 视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 this.type使用 类型投影 结构类型 复合类型 1. this.type使用 c ...

随机推荐

  1. 玩游戏(dfs)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2566 #include <stdio.h ...

  2. El表达式日期处理

    第1步:引入指令  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %&g ...

  3. 使用protobuf传递网络消息

    1.获取protobuf及相关依赖 新建install_protobuf.bat脚本,粘贴以下代码 ::参考文章 https://github.com/google/protobuf/blob/mas ...

  4. 通过学习Date和Calendar时写的日历

    package com.etc.util; import java.util.Calendar; import java.util.Scanner; public class Calendar2 { ...

  5. Jsp页面报错状态码含义

    原来,全部在HttpServletResponse接口的字段里 状态码 (),表示一个请求已经被接受处理,但还没有完成.  状态码 (),表明HTTP服务器从一个服务器收到了一个无效的响应,当其作为一 ...

  6. Linux的那点事

    1.重启nginx服务器 注意,修改了nginx配置文件后最好先检查一下修改过的配置文件是否正确,以免重启后Nginx出现错误影响服务器稳定运行. 判断Nginx配置是否正确命令如下: nginx - ...

  7. python3设置打开文件的编码

    f = open(file_path,'r',encoding='utf8') 用起来很方便,不需要先读取再转码了.

  8. 解决Fiddler抓包上不了网的问题:

    以前安装Fiddler 没有配置过相关设置,经常出现就是打开fiddler后,浏览器就无法上网了,刚开始觉得可能是因为而公司上网是需要自己的代理的,但fiddler打开后默认127.0.0.1作为IE ...

  9. Currying vs Partial Application

    柯里化相当于函数重构: 偏函数相当于函数适配. So, what is the difference between currying and partial application? As we s ...

  10. 59.bouncing results

        一.bouncing results成因及解决方案 bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询路由到不同的 ...