Análise e notas práticas do Spark Big Data (Capítulo 1 Noções básicas da linguagem Scala-2)

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:

  1. Variáveis ​​em Scala devem ser inicializadas quando são declaradas.
  2. Variáveis ​​declaradas usando var podem ser atribuídas à variável novamente após a inicialização;
  3. 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
insira a descrição da imagem aqui
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).
insira a descrição da imagem aqui
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.

  1. 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:
insira a descrição da imagem aqui
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
    insira a descrição da imagem aqui

  • Os resultados em IDEA
    insira a descrição da imagem aqui
    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:
insira a descrição da imagem aqui

  • 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:
insira a descrição da imagem aqui

  • 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:
insira a descrição da imagem aqui

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.

  1. 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
  1. 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

Acho que você gosta

Origin blog.csdn.net/u014727709/article/details/132031799
Recomendado
Clasificación