Spark -- 第一步之学习Scala

Spark第一步之学习Scala


前言

在这里插入图片描述

一、Scala语言的特点

优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以速度会快很多。
能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
学习Scala编程语言,为后续学习Spark和Kafka奠定基础。

Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于JVM平台(Java虚拟机),并兼容现有的Java程序。


二、Scala与Java的关系是什么?

Scala与Java的关系是非常紧密的,因为Scala是基于JVM(JAVA虚拟机)的一门编程语言。所有Scala的代码,都需要经过编译为字节码,然后交由JVM来运行。
所以Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。所以Scala与Java的关系是非常非常紧密的。
Scala是基于Java的,但却高于Java。

三、学习Scala

1.安装Scala

1.安装JDK以及Scala解释器并配置环境

因为Scala是运行在JVM平台上的,所以安装Scala之前要安装JDK,我们这里安装的是JDK1.8版本。
http://www.scala-lang.org/

配置SCALA_HOME
在这里插入图片描述
配置PATH
在这里插入图片描述
验证安装配置是否成功
在这里插入图片描述
idea插件的安装(记得配置SDK就是你解压文件的路径)
在这里插入图片描述

2.Scala基本语法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在scala中,有以下数据类型。例如:
Byte、Char、Short、Int、Long、Float、Double、Boolean
貌似与Java的基本数据类型的包装类型相同,但是scala没有基本数据类型与包装类型的概念,统一都是类。scala自己会负责基本数据类型和引用类型的转换操作类型的加强版类型

Any是abstract类,它是Scala类继承结构中最底层的。所有运行环境中的Scala类都是直接或间接继承自Any这个类。
AnyRef是所有引用类型的基类。
AnyVal 所有值类型的基类。
Nothing是所有类的子类,是一个类。Nothing没有对象,但是可以用来定义类型。
Any:等价于java中的Object

AnyVal:等价于java中的基本数据类型

AnyRef:等价于java中的引用数据类型

Unit:等价于java中的void
nothing:任何类的子类

1、变量的定义

在Scala中声明一个变量:不管是什么类型的变量,在声明时统一使用var和val来声明

var :表示声明一个变量

val:表示声明一个常量 相当于java中的final

注意事项

  1. 声明变量时, 类型可以省略(编译器自动推导,即类型推导)
  2. 类型确定后, 就不能修改, 说明Scala 是强数据类型语言.
  3. 在声明/定义一个变量时, 可以使用var 或者 val 来修饰, var 修饰的变量可改变,
    val 修饰的变量不可改
  4. var 修饰的对象引用可以改变, val 修饰的则不可改变, 但对象的状态(值)却是
    可以改变的。
  5. 变量声明时, 需要初始值。

程序中 +号的使用

  1. 当左右两边都是数值型时, 则做加法运算
  2. 当左右两边有一方为字符串, 则做拼接运算
scala> var str=" 琦"
str: String = 琦

scala> var age=18
age: Int = 18

scala> str="腾"
str: String = 腾
scala> val str3="方"
str3: String = 方

scala> str3="牛"
<console>:12: error: reassignment to val
       str3="牛"
       
scala> var name="马"
name: String = 马

scala> var usename:String ="娜娜"
usename: String = 娜娜

scala> var s = 1
s: Int = 1

scala> var c = 2
c: Int = 2

scala> var b = s+ c
b: Int = 3

scala> var d = "m"
d: String = m

scala> var b = s+d
b: String = 1m

在这里插入图片描述
Scala的浮点型常量默认为Double型, 声明Float型常量, 须后加‘f’或‘F’

字符类型可以表示单个字符,字符类型是Char, 16位无符号Unicode字符(2个字节),
区间值为 U+0000 到 U+FFFF,字符常量是用单引号(‘ ’)括起来的单个字符。
在这里插入图片描述

object test {
   
  def main(args: Array[String]): Unit = {
   
    var c1 : Char = 'a'
    var num : Int = 10 + c1 + 'b'  //205
    var c2 : Char = 'a' + 1//错误
    println(num)
  }
}

强制类型转换
Ø 介绍
自动类型转换的逆过程, 将容量大的数据类型转换为容量小的数据类型。 使用时要
加上强制转函数, 但可能造成精度降低或溢出,格外要注意。
Ø 案例演示

java : int num = (int)2.5
scala : var num : Int = 2.7.toInt //对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标识符的命名规范
标识符概念
1) Scala 对各种变量、 方法、 函数等命名时使用的字符序列称为标识符
2) 凡是自己可以起名字的地方都叫标识符
标识符的命名规则(记住)
Scala中的标识符声明, 基本和Java是一致的, 但是细节上会有所变化。
1) 首字符为字母, 后续字符任意字母和数字, 美元符号, 可后接下划线_
2) 数字不可以开头。
3) 首字符为操作符(比如+ - * / ), 后续字符也需跟操作符 ,至少一个(反编译)
4) 操作符(比如+-*/)不能在标识符中间和最后.
5) 用反引号`....`包括的任意字符串, 即使是关键字(39)也可以 [true]

hello // ok
hello12 // ok
1hello // error
h-b // error
x h // error
h_4 // ok
_ab // ok
Int // ok, 在scala中, Int 不是关键字, 而是预定义标识符,可以用, 但是不推荐
Float // ok
_
// 不可以, 因为在scala中, _ 有很多其他的作用, 因此不能使用
Abc // ok
+*- // ok
+a // error

2、基本操作符

运算符是一种特殊的符号, 用以表示数据的运算、 赋值和比较等。

  1. 算术运算符
  2. 赋值运算符
  3. 比较运算符(关系运算符)
  4. 逻辑运算符
  5. 位运算符
    在这里插入图片描述
    对于除号“/”, 它的整数除和小数除是有区别的: 整数之间做除法时, 只保留
    整数部分而舍弃小数部分。 例如: var x : Int = 10/3 ,结果是 3
    当对一个数取模时, 可以等价 a%b=a-a/b*b , 这样我们可以看到取模的一个本
    质运算(和java 的取模规则一样)。
    注意: Scala中没有++、 --操作符, 需要通过+=、 -=来实现同样的效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
3.流程控制
  1. 顺序控制
  2. 分支控制
  3. 循环控制
object test {
   
  def main(args: Array[String]): Unit = {
   
    var sumVal = 9
    val result1 = {
   
      if (sumVal > 20) {
   
        "结果大于20"
      }
    }
    sumVal = 90
    println(result1) //()
    val result2 =
      if (sumVal > 20) {
   
        "结果大于20"
      }
    println(result2) //结果大于20
  }
}

for 循环

Scala 也为for 循环这一常见的控制结构提供了非常多的特性, 这些for 循环的
特性被称为for 推导式( for comprehension) 或for 表达式( for expression)
范围数据循环方式1
Ø 基本案例
for(i <- 1 to 3){
   
print(i + " ")
}println()

说明

  1. i 表示循环的变量, <- 规定好 to 规定
  2. i 将会从 1-3 循环, 前后闭合
范围数据循环方式2
Ø 基本案例
for(i <- 1 until 3) {
   
print(i + " ")
}println()

说明:

  1. 这种方式和前面的区别在于 i 是从1 到 3-1
  2. 前闭合后开的范围,和java的arr.length() 类似
循环守卫
Ø 基本案例
for(i <- 1 to 3 if i != 2) {
   
print(i + " ")
}p
rintln()

2) 上面的代码等价
for (i <- 1 to 3) {
   
if (i != 2) {
   
println(i+"")
}
}

Ø 基本案例说明

  1. 循环守卫, 即循环保护式( 也称条件判断式, 守卫) 。 保护式为true则进入
    循环体内部, 为false则跳过, 类似于continue
引入变量
Ø 基本案例
for(i <- 1 to 3; j = 4 - i) {
   
print(j + " ")
} Ø

2) 上面的代码等价
for ( i <- 1 to 3) {
   
val j = 4 –i
print(j+"")
}

对基本案例说明

  1. 没有关键字, 所以范围后一定要加; 来隔断逻辑

                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

琦琦今天加油了吗?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值