Py Spark
Py Spark
SUMÁRIO
MATÉRIA......................................................................................................................................................................... 1
................................................................................................................................................................................. 1
............................................................................................................................................................................... 1
PYSPARK
FORMAÇÃO PYSPARK
Introdução
Conceitos
PySpark
o Python + Apache Spark
o Ferramenta de processamento de dados
o Não é data storage
o Distribuído em um cluster, i.e, rede de computadores que opera com o mesmo objetivo, dividindo o
processamento
o Como opera em cluster, os dados são copiados entre os nós do cluster, aumentando a tolerância a
falhas
o Em memória, i.e, leitura é em memória e não em disco, o que dá mais rapidez
o Facilmente escalável
o Aceita dados em HDFS ou cloud
o Particionamento permite separar determinados dados, por exemplo por mês, por nós do cluster,
processando esses dados em paralelo. Ao final, é possível somar tudo
o Alta performance e alta disponibilidade
o Spark tem arquitetura voltada para o processamento de dados, tem melhor performance mas não
substitui o Python ou o SQL
o Spark é originalmente desenvolvido em Scala, mas opera em Python, Java, R e SQL
o Motor de execucao do Spark é o Tungsten, focando em otimizar a CPU
Arquitetura e componentes
o Machine Learning (Mlib)
o SQL (Spark SQL)
Permite ler dados tabulares de várias fontes, como CSV, JSON, Parquet, ORC, etc
Pode usar sintaxe SQL
o Processamento em Streaming
Detecta novos e adiciona ao final da tabela
o Processamento de Grafos (GraphX)
Spark funciona com grafos acíclicos dirigidos, i.e, tem vértices e arestas sem ciclos e com direção
definida
Estrutura
o Driver
Inicaliza SparkSession, solicita recursos computacions do cluster manager, transforma as operacoes
em DAGs, distribui estas pelo cluster
o Manager
Gerencia os recursos do cluster
Quatro formas possíveis de gerenciar: built-in standalone, YARN, Mesos, Kubernetes
o Executer
Roda em cada nó do cluster executando as tarefas
Transformações e ações
o Conceitos
Dataframe é imutável, trazendo tolerancia a falha
Uma transformacao gera um novo dataframe
O processamento de transformacao de fato só ocorre quando há uma acao (lazy evaluation)
Ex: filter, union, sample são transformacoes, já o show é uma acao
o Exemplo
1
PYSPARK
o Tipos de transformacoes
Narrow
Quandos os dados estao em uma mesma particao
Wide
Quandos os dados necessários estao em mais de uma particao
o Componetes
Job
Tarefa
Stage
Divisao do Job
Task
Menor unidade de trabalho
Uma por núcleo e por particao
Exemplo
2
PYSPARK
SparkContext e SparkSession
o SparkContext é a conexao com o cluster
o SparSession é o acesso ao SparkContext
o Para criar sessao automatica, é necessário rodar um script spark no shell (pyspark). O spark cria uma
sessao automaticamente chamada spark
o Se criar uma aplicacao spark, i.e, arquivo .py executável, é preciso criar, por exemplo:
spark = (SparkSession.builder.appName(“meuapp”).getOrCreate())
Formatos de Big Data
o Conceitos
Armazens de dados clássicos usam formatos proprietários, em que o acesso não é direto, mas sim
mediante driver
Armazens de dados modernos usam formatos abertos, com os datalakes, desacoplados de
ferramentas, em que qualquer ferramenta pode acessar, sem precisar de driver
Sao formatos binários e compactados, e não planos como CSV, diminuindo o custo de memória
Suportam schemas
Podem ser particionados entre discos, gerando redundancia e paralelismo (diferentes consultas ao
mesmo tempo, ao mesmo dado, em paralelo)
Principais formatos são o Parquet, Avro e Apache ORC
o Caractéristicas dos formatos
Parquet é colunar, formato padrao do spark
ORC é colunar, padrao Hive
Avro é linha
Linha → muitos atributos e mais escrita
Colunas → menos atributos e mais leitura
Em geral, ORC é mais eficiente na criacao/escrita e tem muito mais compressao
Parquet tem melhor performance na consulta/leitura
Ideal é um benchmark dos dois
Criar máquina virtual
o É ideal usar uma VM devido à chance de desconfigurar o SO padrao ao ponto de não conseguir
recupera-lo, mas ele pode ser instalado diretamente no SO padrao, como o Windows
o Necessário instalar o Spark de forma personalizada
o Alterar variáveis de ambiente
o Depois instalar pip, pandas, numpy
Acessar a máquina via SSH
o Instalar o Putty
o Deixar a máquina ligada
o Facilita para copiar e colar
o IP: 127.0.0.1
Estruturas de dados
RDD (Resilient Distributed Datasets)
3
PYSPARK
o Estrutura básica de baixo nível, i.e, mais complexo, mas mais flexível
o Complexo e verboso, otimizacao difícil pelo Spark
o Dados “imutáveis”, distribuídos pelo cluster
o Em memória
o Pode ser persistido em disco
o Tolerante a falha
o Operacoes sobre um RDD criam um novo RDD
Dataset e DataFrame
o Sao estruturas de mais alto nível, tabulares, semelhantes a tabelas de banco de dados
o Dataset está disponível apenas em Java e Scala
o Compatível com objetos dataframe do R e Python
RDD
Como criar RDD
o variavel = sc.parallelize([dados])
o sc é SparkContext
o Ex: numeros = sc.parallelize([1,2,3,4,5,6,7,8,9,10])
o Ex: lista de clientes: compras = sc.parallelize( [ (1,200), (2,300), (3,120) ] )
Vendo os 5 primeiros elementos
o numeros.take(5)
o Também é possível ver os maiores, usando numeros.top(5)
o Também é possível usar collect, que traz todos os dados, ex: numeros.collect()
Operacoes
o Contar: numeros.count()
o Média: numeros.mean()
o Somar: numeros.sum()
o Valor máximo ou mínimo: numeros.max() ou numeros.min()
o Desvio padrao: numeros.stdev()
Filtrar
o Como filtro é uma transformacao, colocamos ela em uma variavel
o Ex: Filtro = numeros.filter(lambda filtro: filtro > 2)
o Para retornar os dados, executa-se o .collect()
Criar amostra
o Cria amostra com (True) ou sem reposicao, usando .sample
o Ex: amostra = numeros.sample(True, 0.5, 1)
o True indica com reposicao, 0.5 indica a probabilidade
Map
o Aplica uma expressao lambda a todos os elementos
o Ex: mapa = numeros.map(lambda: mapa * 2) → multiplica todos os elementos por 2
Uniao
o Une dois conjuntos de dados
o uniao = numeros.union(numeros2)
Intersecao
o intersecao = numeros.intersection(numeros2)
Diferenca entre elementos
o difer = numeros.subtract(numeros2)
Produto cartesiano
o cartesiano = numeros.cartesian(numeros2)
Conta numero de vezes que um valor ocorre
4
PYSPARK
o Usa-se o countByValue()
o numeros.countByValue()
Lista de tuplas
o compras = sc.parallelize([(1,200), (2,300), (3,120)])
o Acessar chaves: compras.keys()
o Acessar valores: compra.values()
o Contagem por chaves: compras.countByKey()
o Função calculando valores: compras.mapValues(lambda x: x + 2)
JOIN
o debitos = sc.parallelize([(1,20), (2,30)])
o resultado = compras.join(debitos)
Lazy evalutation
o O processamento de transformacao de fato só ocorre quando há uma acao
Tipos de dados suportados pelo DataFrame
Schema
5
PYSPARK
o Soma agrupada
6
PYSPARK
o Selecionando apenas algumas colunas
Importando dados
o Definindo o schema
7
PYSPARK
o Inferindo o schema
Condicionais
o Filtrando dados no DF
o Usando operadores
8
PYSPARK
o Renomeando colunas
9
PYSPARK
o Collect()
Retorna todos os dados no formato de lista
10
PYSPARK
o Soma agrupada
o Filter
Exportando/importando dados
o Exportando
o Importando
o OBS
11
PYSPARK
CSV, ao ser importado, não guarda o schema, diferentemente do Parquet, JSON e ORC
Para contornar isso, é possível definir o schema no load
Spark SQL
Conceitos
o Utiliza o Metastore do Hive
o Hive é um DW que opera sobre o HDFS, DW do Hadoop
Tabela
o Tabela é persistente, já o DataFrame não
Views
o Tipos:
Globais: visiveis em todas as sessoes
Sessao: visíveis apenas na própria sessao
Consultando BD padrao
Criando DB
12
PYSPARK
Escolhendo o DB
Mostrando tabelas
Listando tabelas
13
PYSPARK
Criando view usando SQL
JOINS
o Inner
Spark SQL
o Conceitos
Usando spark-sql no shell
Digita SQL direto no shell
o Comando
spark-sql
Outras fontes de dados
PostgreSQL
o Instalação
14
PYSPARK
O comando para instalar o postgre não funcionou
Usei o sudo apt-get -y install postgresql
o Conectando ao PostgreSQL e configurando
o
o Listando tabelas criadas
15
PYSPARK
16
PYSPARK
MongoDB
o Etapas
Para interagir com o Mongo, o Pyspark precisa de uma pacote, diferentemente do Postgre, que
podemos usar o JDBC
o Instalando
17
PYSPARK
o Acessando Mongo
o Consultando no Mongo
o Consultando os documentos
18
PYSPARK
o Instalar pacote para permitir que o Spark interaja com o Mongo
o Gravando no Mongo
Criando Aplicações
Escrevendo no console
o Escrevendo o código no editor de texto (gedit)
o Cria o módulo main e exibe o resultado no console com método write
o Depois, usa-se o método sparksubmit e o nome do app para que o mesmo seja executado
19
PYSPARK
o Código
o Call
20
PYSPARK
o Call
o Conferindo
21
PYSPARK
Machine Learning
Conceitos
ML no Spark
o Bibliotecas
o Pipelines
Vectorizacao
22
PYSPARK
o Criando modelo
Regressao linear
Random forest
o Previsao
Regressao Linear
Random Forest
o Avaliando o modelo
Regressao linear
23
PYSPARK
Random forest
Classificacao
o Bibliotecas
o Preparando dados
o Criando modelo
o Previsao
24
PYSPARK
o Avaliando modelo
Pipelines
o Bibliotecas e dados
25
PYSPARK
o Modelo
o Pipeline
Naives Bayes
o Imports
26
PYSPARK
o Tratamento dos dados
o Separando os dados
o Modelo
o Previsao
o Performance
27