Spark

1.Scala的重大价值

曾经有人问Java之父,“除了Java语言以外,您现在还使用JVM平台上的哪种编程言?”他毫不犹豫地说是Scala!

Spark也是基于JVM,我们构筑分布式系统,借助JVM,而不一定是Java语言。Spark和消息中间件KAFKA等都是用Scala编写的,学好Scala是掌握Spark的关键。

Scala和Java的关系——Scala和Java都是基于JVM的,Scala可以调用Java的任何功能。Spark运行在Hadoop上,Spark可以调用Hadoop的所有功能,可以认为Scala就是升级版本的Java!有以下几个显著特性:
1)Scala是纯面向对象的语言;
2)Scala是面向对象和函数式结合的语言。函数式编程用于实现具体的方法和功能,实现比Java更加简洁优雅,代码量只是Java的 1/5 ~ 1/10。

2.Scala基础语法入门实践

首先,参照相关攻略,在Linux下分别下载安装Java、Scala,然后配置Java和Scala环境变量。安装完毕,在终端敲入scala即可进入Scala命令行,如下所示:

Java安装参看Ubuntu16.04下Java环境安装与配置
Scala安装参看Ubuntu16.04下搭建Scala开发环境

leo@leo-virtual-machine:~$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
leo@leo-virtual-machine:~$ scala -version
Scala code runner version 2.12.1 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.

测试

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
to       toChar      toDouble   toInt    toRadians   toString   
toByte   toDegrees   toFloat    toLong   toShort  
scala> res2.toInt
res3: Int = 9

变量

var声明可变变量;val声明不可变变量。

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

val 至关重要,分布式系统交互的时候传出数据,校验数据或者对数据进行处理的时候,都不希望数据的改变。Java中一般指定为final类型

scala> val result = 10+2;
result: Int = 12

scala> result = 13
<console>:12: error: reassignment to val
       result = 13
              ^
scala> var name="spark"
name: String = spark

scala> name="scala"
name: String = scala


//apply工厂构造实现方法
//数组的声明

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


//if表达式

scala> if(age>=18) "adult" else "child"
res13: String = adult


scala> val result=if(age>18){};
result: Unit = ()


cala> val result=if(age>18){
     | "adult"
     | 9
     | }
<console>:13: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
       "adult"
       ^
result: AnyVal = 9



scala> val result=if(age>18){
     | "adult"
     | buffered=10
     | }
<console>:14: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
       "adult"
       ^
result: Unit = ()


scala> val result=if(age>18){
     | "adult"
     | buffered=10
     | buffered
     | }
<console>:14: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
       "adult"
       ^
result: AnyVal = 10

//最后一行代码快的值就是整个代码块的值
//块表达式



//printf print 占位符 \n

scala> println("spark")
spark

scala> print("\nspark")

spark

scala> printf("%s is the future Big Data Computation Franmword. \n","sprak")
sprak is the future Big Data Computation Franmword. 

//readline

scala> readLine("Please enter your password:")
<console>:12: warning: method readLine in trait DeprecatedPredef is deprecated (since 2.11.0): use the method in `scala.io.StdIn`
       readLine("Please enter your password:")
       ^
Please enter your password:res0: String = rere

//循环

//while

scala> var element=100;
element: Int = 100

scala> while(element>10){
     | println(element)
     | element -= 1
     | }
100
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11


//for


scala> for(i<- 0 to element) println(i)
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
91
92
93
94
95
96
97
98
99
100




//for加上条件(偶数)

scala> for(i<- 0 to element if i%2 ==0) println(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
92
94
96
98
100



//break
scala> import scala.util.control.Breaks._
import scala.util.control.Breaks._

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


//return


scala> f1

1

2

3

4

res1: Any = 5

//解释以上代码块,def是定义一个函数。f1就是一个函数。








3.Scala函数入门实战

4.Scala中Array、Map、Tuple实战

5.综合案例及Spark源码解析

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xulimessage

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

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

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

打赏作者

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

抵扣说明:

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

余额充值