Diretório de artigos
Resumo do capítulo
Spark é um mecanismo de computação rápido e de uso geral projetado para processamento de dados em grande escala. Ele é desenvolvido e implementado pela linguagem Scala. Em relação à tecnologia de big data, é a computação de dados em si, e Scala possui recursos de engenharia de projetos de organização orientada a objetos e A função de cálculo de dados e a forte integração de Spark e Scala, este livro usará a linguagem Scala para desenvolver programas Spark, portanto, aprender bem Scala nos ajudará a compreender melhor a estrutura Spark.
1.2 Sintaxe básica do Scala
1.2.1 Declarando valores e variáveis
Scala possui dois tipos de variáveis, uma é uma variável declarada com a palavra-chave var, e seu valor é mutável; a outra é uma variável declarada com a palavra-chave val, também chamada de constante, e seu valor é imutável.
- Variáveis declaradas com a palavra-chave var
var myVar:String="Hello"
- Variáveis declaradas com a palavra-chave val
val age:Int=10
Existem algumas coisas a serem observadas:
- Variáveis em Scala devem ser inicializadas quando são declaradas.
- Variáveis declaradas usando var podem ser atribuídas à variável novamente após a inicialização;
- O valor de uma constante declarada com val não pode ser reatribuído.
Ao declarar uma variável, não precisamos fornecer o tipo da variável, pois no momento da inicialização, o mecanismo de inferência de tipo do Scala pode calculá-la automaticamente com base no valor inicializado da variável.
O código acima para declarar as variáveis myVar e age é equivalente ao seguinte código:
var myVar = "Hello" //使用关键字var声明的变量
val age = 10 //使用关键字val声明的变量
Nota: Ao usar a palavra-chave var ou val para declarar uma variável, o nome da variável imediatamente a seguir não pode ser igual à palavra reservada em Scala, e o nome da variável pode começar com uma letra ou sublinhado, e o nome da variável é estritamente maiúscula. -confidencial.
1.2.2 Tipos de dados
- Qualquer linguagem de programação possui tipos de dados específicos e Scala não é exceção.
- Ao contrário de outras linguagens, todos os valores em Scala possuem um tipo, incluindo números e funções.
A hierarquia dos tipos de dados em Scala
Como pode ser visto na figura acima, Any é o supertipo de todos os tipos, também conhecido como tipo de nível superior, que contém duas subclasses diretas, como segue:
-
AnyVal: Indica um tipo de valor, e os dados descritos pelo tipo de valor são um valor que não está vazio, não é um objeto. Ele predefine 9 tipos, nomeadamente Double, Float, Long, Int, Short, Byte, Unit, Char e Boolean. Dentre eles, Unit é um tipo de valor que não representa nenhum significado e sua função é semelhante a void em Java.
-
AnyRef: Indica o tipo de referência. Pode-se considerar que, exceto valores, todos os tipos herdam de AnyRef.
Na parte inferior da hierarquia de tipos de dados Scala, existem mais dois tipos de dados, nomeadamente Nothing e Null, como segue:
- Nada: um subtipo de todos os tipos, também conhecido como tipo inferior. Seu uso pretendido é sinalizar o encerramento, como lançar uma exceção, sair do programa ou um loop infinito.
- Nulo: Um subtipo de todos os tipos de referência, seu principal objetivo é interoperar com outras linguagens JVM e dificilmente é utilizado em código Scala.
1.2.3 Sobrecarga aritmética e de operadores
Os operadores aritméticos (+, -, *, /,%) em Scala funcionam da mesma forma que em Java, assim como os operadores de bit (&, |, >>, <<). É particularmente enfatizado que estes operadores em Scala são na verdade métodos. Por exemplo, a+b é na verdade uma abreviação de a.+(b).
Nota: Scala não fornece operadores ++ e –. Se quisermos obter o efeito de aumentar ou diminuir, podemos usar "+=1" ou "-=1" para alcançá-lo.
1.2.4 Declarações da Estrutura de Controle
No Scala, as instruções da estrutura de controle incluem instruções de ramificação condicionais e instruções de loop. Entre eles, a instrução de ramificação condicional inclui a instrução if, a instrução if...else, a instrução if...else if...else e a instrução aninhada if...else; a instrução de loop inclui o loop for, o loop while e o do. ..enquanto loop.
- instrução de ramificação condicional
- se declaração condicional
if (布尔表达式){
语句块
}
- instrução condicional if-else
if (布尔表达式){
语句块
} else{
语句块
}
- instrução if-else-if-else
if (布尔表达式1){
语句块
} else if(布尔表达式2){
语句块
} else if(布尔表达式3){
语句块
} else {
语句块
}
- instrução aninhada if-else
if (布尔表达式1){
语句块
if(布尔表达式2){
语句块
}
}else if (布尔表达式3){
语句块
else if (布尔表达式4){
语句块
}
}else{
语句块
}
O código de exemplo é o seguinte:
2. Instrução de loop
A instrução for em Scala e a instrução de loop em Java têm uma grande diferença na sintaxe. Vamos apresentar a instrução de loop for em Scala.
- instrução de loop for
for(变量<-表达式/数组/集合){
循环语句;
}
Abaixo, fazemos um loop de 0 a 9 e imprimimos o valor para demonstração da operação sempre que fazemos um loop. Na sintaxe Scala, "0 a 9" pode ser usado para representar o intervalo de 0 a 9, e o intervalo inclui 9. O código de exemplo é o seguinte:
-
Linha de comando do DOS
-
Os resultados em IDEA
são os seguintes:
0 1 2 3 4 5 6 7 8 9
Scala pode filtrar alguns elementos usando a instrução de julgamento if na instrução de loop for, e várias condições de filtro são separadas por ponto e vírgula. Por exemplo, para gerar números pares maiores que 5 no intervalo de 0 a 9, o código de exemplo é o seguinte:
-
A instrução do loop while
A instrução do loop while em Scala é exatamente a mesma que em Java, e o formato da sintaxe é o seguinte: -
instrução while
while(布尔表达式){
循环语句;
}
Abaixo, demonstramos o uso de while imprimindo casos ímpares.
Suponha que exista uma variável x = 1, julgue se é menor que 10, se for, imprima-a e execute a operação +2.
O código de exemplo é o seguinte:
- instrução do-while
do{
循环语句;
}while(布尔表达式)
A principal diferença entre a instrução de loop do...while e a instrução while é que a instrução de loop da instrução do...while é executada pelo menos uma vez. O código de exemplo é o seguinte:
1.2.5 Métodos e funções
No Scala, possui métodos e funções como Java. Um método Scala faz parte de uma classe, enquanto uma função é um objeto que pode ser atribuído a uma variável. Em outras palavras, as funções definidas em uma classe são métodos.
No Scala, as funções podem ser definidas usando instruções def e instruções val, enquanto os métodos só podem ser definidos usando instruções def. Os métodos e funções do Scala são explicados abaixo.
- Método
O formato de definição de um método Scala é o seguinte:
def functionName ([参数列表]):[return type]={
function body
return [expr]
}
A seguir é definido um método add para realizar a adição e soma de dois números. O código de exemplo é o seguinte:
def add(a:Int,b:Int):Int={
var sum:Int = 0
sum = a + b
return sum
}
O formato de uma chamada de método Scala é o seguinte:
//没有使用实例的对象调用格式
functionName(参数列表)
//方法使用实例的对象来调用,我们可以使用类似Java的格式(“.”号)
[instance.]functionName(参数列表)
A seguir, na classe Teste, defina um método addInt para realizar a adição e soma de dois inteiros. Aqui, usamos "nome da classe. nome do método (lista de parâmetros)" para chamar, o código de exemplo é o seguinte:
scala> :paste # 多行输入模式的命令
// Entering paste mode (ctrl-D to finish)
object Test{
def addInt(a:Int,b:Int):Int={
var sum:Int =0
sum = a + b
return sum
}
}
// Exiting paste mode, now interpreting. # Ctrl+d结束多行输入模式
defined object Test
scala> Test.addInt(4,5) # 方法调用
res0: Int = 9
- Funções
Uma função em Scala é um objeto que pode ser atribuído a uma variável.
A sintaxe de definição de uma função Scala é a seguinte:
val functionName ([参数列表]):[return type]={
function body
return [expr]
}
A seguir, defina uma função addInt para realizar a adição e soma de dois inteiros. O código de exemplo é o seguinte:
scala> val addInt =(a:Int,b:Int) => a+b
addInt: (Int, Int) => Int = <function2>
scala> addInt(6,7)
res1: Int = 13
- Convertendo um método em uma função
O formato de conversão de um método em uma função é o seguinte:
val f1 = m _
No formato acima, o nome do método m é seguido por um espaço e um sublinhado para informar ao compilador para converter o método em uma função em vez de chamar o método. A seguir, defina um método m para converter o método m em uma função. O código de exemplo é o seguinte:
scala> def m(x:Int,y:Int):Int=x*y # 方法
m: (x: Int, y: Int)Int
scala> val f = m _
f: (Int, Int) => Int = <function2> # 函数
scala> f(2,3)
res2: Int = 6
Nota: O tipo de valor de retorno do método Scala pode ser omitido e o compilador pode inferi-lo automaticamente, mas para o método recursivo o tipo de retorno deve ser especificado.
Reimpresso de: https://blog.csdn.net/u014727709/article/details/132031799
bem-vindo para começar, bem-vindo para comentar, bem-vindo para corrigir