Spark

Posted xulimessage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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源码解析

以上是关于Spark的主要内容,如果未能解决你的问题,请参考以下文章

Spark版本定制第6天:Job动态生成和深度思考

Spark版本定制第8天:RDD生成生命周期彻底

Spark核心概念理解

spark点亮

spark源码之SparkContext

Spark学习之路 (十七)Spark分区