Escolar Documentos
Profissional Documentos
Cultura Documentos
.
Spark
■ Construído em Scala
■ Roda em uma JVM (Java Virtual Machine)
■ Aplicações: Driver e Executors
■ Driver: processo que é responsável por:
- Manter informações sobre a aplicação Spark;
- Responder a entradas dos programas do usuário
- Analisar, distribuir e agendar os trabalhos nos
executores
.
SparkSession
.
Transformações
Executor 3 Executor 4
– Suponha haver três RDDs, cujas partições sejam
representadas pelas formas: quadrado: , círculo
e triângulo .
RDD 1
RDD 2
RDD 3
■ Os RDDs são imutáveis, então, uma vez criados,
não se pode alterá-los, e sim, criar novos RDDs a
partir de RDDs existentes (operação conhecida por
transformação).
resulta em:
Array[(String, Int)] = Array((RJ,16), (SP,4), (ES,8), (MG,4))
filter(func)
Retorna um novo RDD formado pelos elementos do RDD origem que
satisfazem a função func (elementos que fazem a func retornar true).
resulta em:
resulta em:
executar:
scala> est1.union(est2).collect
resulta em:
resulta em:
val rdd =
sc.parallelize(Seq(Seq("A",65),Seq("B",66)).map(Row.fromSeq(_)))
cd bigdata_docker/
6) Baixe as imagens:
docker-compose pull
docker-compose up –d
8) Para executar códigos Scala:
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
val rdd =
sc.parallelize(Seq(Seq("A",65),Seq("B",66)).map(Row.fromSeq(_)))
val schema = StructType(Seq(StructField("letra", StringType),
StructField("cod", IntegerType)))
val df = spark.createDataFrame(rdd,schema)
df.show
11) Crie o Dataset “ds” a partir do Dataframe “df”, crie uma view
de nome “tabela” e filtre (transformação) os dados de “ds”,
criando o dataset “ds1”, com os dados de “ds” ordenados pelo
campo “letra” em ordem invertida:
a = $a e b = $b
Observe o caractere interpolador “s” antes das aspas
que abrem a String (sem espaço em branco). Caso
não haja “s” antes das aspas, a String é impressa tal
como está escrita (sem avaliação das variáveis):
a = $a e b = $b
Tipos de Dados
teste
Outro exemplo: concatenando strings com o
operador “+”:
import java.util.Date
+ : adição
- : subtração
* : multiplicação
/ : divisão
% : resto da divisão
Operadores Relacionais
= : atribuição
== : igual a
!= : diferente de
> : maior que
>= : maior ou igual a
< : menor que
<= : menor ou igual a
Operadores Lógicos
&& : e
|| : ou
! : não
Outros Operadores
+= : adiciona o valor à direita à variável à esquerda, e
atribui à variável o valor resultante
Por exemplo:
scala> var x = 1
x: Int = 1
scala> x += 4
scala> println (x)
5
Outros Operadores
-= : subtrai o valor à direita da variável à esquerda, e
atribui à variável o valor resultante
*= : multiplica o valor à direita à variável à esquerda, e
atribui à variável o valor resultante
/= : divide o valor da variável à esquerda pelo valor à
direita, e atribui à variável o valor resultante
%= : calcula o resto da divisão da variável à esquerda
pelo valor à direita, e atribui à variável o valor resultante
Estrutura de Controle: if
Exemplo:
scala> val a = 0
Exemplo 1:
10
15
Exemplo 2:
for (a <- List(1,2,3)) println (a * 2)
2
6
Interpolador
O interpolador “s” avalia uma variável dentro de uma
String. Por exemplo:
scala> val a = 1
scala> val b = 1.0
scala> val tipos = s"a = $a e b = $b"
scala> println (tipos)
a = 1 e b = 1.0
Já o interpolador “f”, avalia uma variável ou
expressão, e pode formatá-la conforme o
especificador de formato escolhido (tal como
utilizado no comando printf da linguagem C).
Por exemplo, se o valor da variável “b” deve ser
impresso com três casas decimais:
scala> val a = 1
scala> val b = 1.0
scala> val tipos = f"a = $a%d e b = $b%1.3f"
scala> println (tipos)
a = 1 e b = 1.000
Função
A declaração de uma função tem a seguinte sintaxe, e inicia
pela palavra-chave def:
def nomeDaFunção () : tipoDaFunção = valorDeRetorno
Exemplo:
scala> def num10 () : Int = 10
scala> println (num10)
10
Podem ser especificados parâmetros:
Exemplo:
5
Uma função que não retorna valor, é uma função do
tipo Unit (equivalente ao void de Java).
Neste caso, o tipo de retorno da função pode ser
declarado como Unit: def msg (m : String) : Unit.
Ou pode ser omitido.
Exemplo:
Alô você!
Para conter mais de uma sentença, o corpo da função
tem que estar delimitado por chaves. Por exemplo:
scala> def somaTodosNums (n : Int) : Int = {
var soma = 0
for (x <- 1 to n)
soma += x
return soma
}
Funções de Primeira Classe e Funções de Alta Ordem
scala> stn(10)
res2: Int = 55
Outro exemplo: criar a função “opera”, que recebe
por parâmetro a função “fc” (recebe um inteiro e
retorna um inteiro), e um valor do tipo inteiro, “x”. A
função “fc” deve receber - por parâmetro - o valor
“x”:
scala> opera(dobro,2)
res5: Int = 4
scala> opera(triplo,2)
res6: Int = 6
scala> def opera (fc : Int => Int , x : Int) = fc(x)
scala> opera(dobro,2)
res6: Int = 6
Funções Anônimas
res9: Int = 15
Definindo a funcionalidade a posteriori:
scala> opera(x=>x+1,2)
res10: Int = 3
scala> opera(x=>x*2,2)
res11: Int = 4
Classe
Classes podem ser declaradas por meio da palavra-chave class.
Podem ser definidos parâmetros, que devem ser passados no
momento em que a classe está sendo instanciada, em substituição
ao método construtor.
private var d = 0
}
scala> val num = new Numeros (10,2)
scala> num.soma()
res8: Int = 12
scala> num.subtracao()
res9: Int = 8
Case Class
São classes que não precisam da palavra-chave
“new” para serem instanciadas.
Exemplo: Seja a Case Class Soma (SomaCC):
}
Obter a soma entre 1 e 2, por meio de SomaCC (sem
utilizar a palavra-chave “new”):
scala> SomaCC(1,2).soma()
res8: Int = 3
Array
Arrays são coleções de dados de mesmo tipo. Variáveis
do tipo Array são variáveis indexadas, com o primeiro
índice igual a 0 (zero). Podem conter elementos
duplicados e são modificáveis.
Declaração:
scala> var arr = new Array[String](2)
scala> arr(0)
scala> arr(1)
scala> arr(1).asInstanceOf[Int] + 1
res69: Int = 3
A iteração do array pode ser realizada pelo comando
“for”:
Exemplo:
Ordem na chamada: 1
Listas
Listas são similares a arrays, com a diferença que
listas são imutáveis, ou seja, não podem sofrer
alterações após criadas. Pode-se criar novas listas a
partir de listas existentes, mas, não, alterar uma lista
já definida.
Exemplo:
Função: ::
novaLista: Int = 2
Função: distinct
primeiroElemento: Int = 1
Função: indexOf
posicao: Int = 1
posicao: Int = -1
Função: init
ultimoElemento: Int = 3
Função: lastIndexOf
posicao: Int = 1
posicao: Int = -1
Função: map
scala> nomes.map(_.toUpperCase)
Função: flatMap
scala> nomes.flatMap(_.toUpperCase)
maiorElemento: Int = 3
Função: min
menorElemento: Int = 1
Função: mkString
str: String = 1 2 3 3
soma: Int = 9
Função: tail