SlideShare uma empresa Scribd logo
Desenvolvendo
Aplicações baseadas
em Big Data com
PySpark
Sobre
Vinícius Aires Barros
Ciência da Computação 2016 - UFT
Mestrando em Ciência da Computação - ICMC USP
Laboratório de Sistemas Distribuídos e Programação Concorrente -
LaSDPC
Áreas de Interesse: IoT, Distributed Systems, Big Data e Data Science.
GitHub: @v4ires
Website: http://viniciusaires.me
E-mail: v4ires@gmail.com
Big Data
Sinônimo de grande volume de dados?
“Big Data é definido como um
conjunto de dados estruturados ou
não estruturados que não puderam
ser percebidos, adquiridos,
gerenciados e processados pelos
modelos tradicionais de hardware e
software”.
Conceitos
● Grandes Volumes de Dados
● Programação de Alto Desempenho
(HPC)
● Dados Estruturados, Não
Estruturados e Semiestruturados
● Bancos de Dados SQL e NoSQL
● MapReduce
● Apache Hadoop, Spark, etc.
Timeline
6
Apache HadoopMapReduce
2003
Google File
System
2004 2006
Spark
UC Berkeley
Lab
2009
Apache Spark
2013
Apache Spark se torna
um projeto Top Level
da Apache
2014
4V’s do Big Data
Sistemas de Arquivos Distribuídos
Bancos de Dados Distribuídos
Casos de Uso
● Sistemas de Recomendação
● Aprendizagem de Máquina
● Processamento de Imagens
● Mineração de Dados
● etc.
Desafios
● Escalabilidade
● Dados Complexos
● Interoperabilidade
● Latência
● Velocidade de Escrita
em Disco e de RAM
● etc.
Modelo de Programação MapReduce
● Google
● Programação
Paralela/Disribuída;
● Funções: Map & Reduce;
● Simplificação dos modelos de
programação paralela e
concorrente tradicionais;
● Tolerância a falhas;
● Escalabilidade.
Funcionamento do MapReduce
Lightning-fast unified analytics engine
Apache Spark
O que é o Apache Spark?
O Apache Spark é um software de código aberto
mantido pela Apache Foundation que tem como
propósito fornecer uma implementação livre e
melhorada do modelo de programação MapReduce.
Características
❏ Implementação em Scala
❏ Arquitetura Mestre Escravo (Master/Slave)
❏ Modelo de Programação MapReduce
❏ Resilient Distributed Dataset (RDD)
❏ Memória Principal (RAM)
❏ Processamento Distribuído
❏ Processamento em Tempo Real
❏ Escalável
❏ Tolerante a Falhas
❏ Integração com HDFS
O que não é?
❏ Linguagem de Programação
❏ Solução Definitiva
❏ Substituto do Apache Hadoop
Arquitetura Apache Spark
Resilient Distributed Dataset (RDD)
Quem utiliza?
Literatura Básica
Execução do Apache Spark
1. Acessem:
http://github.com/v4ires/caipyra-2
018-pyspark
2. Tenham o docker instalado
3. Executem o Container
4. Pronto :)
PySpark (Python + Spark)
● Interface de programação em
Python
● Py4J (Interface de integração
do Java com Python)
● Modo Iterativo de Programação
● Suporte a Python 2 e 3
● Integração com Jupyter
● Integração com bibliotecas
Python (Scipy, Matplotlib,
Seaborn...)
Operadores PySpark
● Transformações
○ Map
○ FlatMap
○ Filter
○ GroupByKey
○ outros.
● Ações:
○ Take
○ Count
○ Collect
○ outros.
Exemplo Prático I
WordCount (Contador de Palavras)
Hello World (World Count)
Transformações
Alguns exemplos de transformações com RDD
Map
A função de map é repetida em todas as linhas do RDD e gera um novo RDD como
saída. Usando a transformação map(), utilizamos qualquer função, e essa função é
aplicada a todos os elementos do RDD. Por exemplo, temos um RDD [1, 2, 3, 4, 5]
se aplicarmos “rdd.map(x => x + 2)”, será obtido o resultado (3, 4, 5, 6, 7).
FlatMap
Na função flatMap() para cada elemento de entrada temos muitos elementos em um
RDD de saída. O uso mais simples de flatMap() é dividir cada string de entrada em
palavras. Map e flatMap são semelhantes na maneira que eles pegam uma linha da
entrada RDD e aplicam uma função nessa linha. A principal diferença entre map() e
flatMap() é que a função map() retorna apenas um elemento, enquanto flatMap()
pode retornar uma lista de elementos.
Filter
A função RDD filter() retorna um novo RDD, contendo apenas os elementos que
atendem a um predicado. Por exemplo, suponha que o RDD contenha primeiro
cinco números naturais (1, 2, 3, 4 e 5) e o predicado é verificar os números pares.
O RDD resultante após aplicar a função filter() conterá apenas os números pares,
ou seja, 2 e 4.
GroupByKey
Quando usamos groupByKey() em um conjunto de dados de pares (K, V), os
dados são embaralhados de acordo com o valor da chave K em um outro RDD.
ReduceByKey
Quando usamos reduceByKey em um dataset (K, V), os pares na mesma
máquina com a mesma chave são combinados antes que os dados sejam
embaralhados.
Union
Com a função union(), obtemos a união de dois RDD em um novo RDD. A principal
regra dessa função é que os dois RDDs devem ser do mesmo tipo. Por exemplo, os
elementos do RDD1 são {“Spark”, “Spark”, “Hadoop”, “Flink”} e os do RDD2 são {“Big
data”, “Spark”, “Flink”}, portanto, o rdd1.union(rdd2) resultará nos seguintes
elementos {“Spark”, “Spark”, “Spark”, “Hadoop”, “Flink”, “Flink”, “Big Data”}.
SortByKey
Quando aplicamos a função sortByKey() em um conjunto de dados de pares
(K, V), os dados são classificados de acordo com a chave K em outro RDD.
Ações
Alguns exemplos de ações com RDD
Take N
A ação take(n) retorna n primeiros elementos do RDD. Por exemplo, considere o
RDD {1, 2, 3, 4, 5, 6} neste RDD “take(4)” dará resultado {1, 2, 3, 4}.
Top N
A ação top(n) retorna n últimos elementos do RDD. Por exemplo, considere o
RDD {1, 2, 3, 4, 5, 6} neste RDD “top(4)” dará resultado {6, 5, 4, 3}.
Count
A ação count() retorna o número de elementos no RDD. Por exemplo, o RDD
possui valores {1, 2, 3, 4, 6} neste RDD a função “count ()” irá retornar o valor 6.
Collect
A ação collect() é a operação comum e simples que retorna todo o conteúdo de
um RDD para um contexto de memória local. A ação collect() tem como
restrição a capacidade de memória local de armazenar todos dos dados
contidos em um RDD.
Reduce
A função reduce() pega grupos de elementos como entrada do RDD e, em
seguida, produz a saída do mesmo tipo. Diversos operadores podem ser
utilizados na operação de redução, por exemplo, adição, subtração,
multiplicação, divisão, dentre outros.
ForEach
Quando temos uma situação em que queremos aplicar a operação em cada
elemento do RDD, mas não deve retornar o valor para o driver. Neste caso, a
função foreach() é útil. Por exemplo, inserindo um registro no banco de dados.
MLlib
Biblioteca de Aprendizagem de Máquina
K-Means
● Algoritmo de aprendizagem de
Máquina Não Supervisionado
● Algoritmo de Agrupamento ou
Clusterização
● Versão otimizada para uso de
programação paralela/concorrente
● Medida de Distância (Similaridade
de Dados)
Outros exemplos
Exemplos de códigos
Obrigado!
Dúvidas?
Você pode me encontrar:
▸ @v4ires
▸ v4ires@gmail.com

Mais conteúdo relacionado

Mais procurados

Python pandas Library
Python pandas LibraryPython pandas Library
Python pandas Library
Md. Sohag Miah
 
Hbase
HbaseHbase
Data Wrangling with Pandas
Data Wrangling with PandasData Wrangling with Pandas
Data Wrangling with Pandas
Luis Carrasco
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
profjr
 
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Diana Ungaro Arnos
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Leinylson Fontinele
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Algoritmos - Arquivos Parte 1
Algoritmos - Arquivos Parte 1Algoritmos - Arquivos Parte 1
Algoritmos - Arquivos Parte 1
Elaine Cecília Gatto
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
Osvaldo Santana Neto
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoSidney Roberto
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
MICHRAFY MUSTAFA
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 
Introduction aux SGBD
Introduction aux SGBDIntroduction aux SGBD
Introduction aux SGBD
Christophe Vaudry
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
Modern Data Stack France
 
Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
Leinylson Fontinele
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
Delacyr Ferreira
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
Diemesleno Souza Carvalho
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
Rafael Cassau
 

Mais procurados (20)

Python pandas Library
Python pandas LibraryPython pandas Library
Python pandas Library
 
Hbase
HbaseHbase
Hbase
 
Data Wrangling with Pandas
Data Wrangling with PandasData Wrangling with Pandas
Data Wrangling with Pandas
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
 
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Algoritmos - Arquivos Parte 1
Algoritmos - Arquivos Parte 1Algoritmos - Arquivos Parte 1
Algoritmos - Arquivos Parte 1
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Introduction aux SGBD
Introduction aux SGBDIntroduction aux SGBD
Introduction aux SGBD
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
 
Aula diagrama de classes
Aula diagrama de classesAula diagrama de classes
Aula diagrama de classes
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 

Semelhante a Desenvolvendo Aplicações baseadas em Big Data com PySpark

Modelos de computação distribuída no Hadoop
Modelos de computação distribuída no HadoopModelos de computação distribuída no Hadoop
Modelos de computação distribuída no Hadoop
Big Data Week São Paulo
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
Roberto Oliveira
 
Seminário Hadoop
Seminário HadoopSeminário Hadoop
Seminário Hadoop
Ivanilton Polato
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
Fernando Cicconeto
 
Dados espaciais em R (2020)
Dados espaciais em R (2020)Dados espaciais em R (2020)
Dados espaciais em R (2020)
Vitor Vieira Vasconcelos
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
Christiano Anderson
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Sandro Andrade
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQL
pichiliani
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Mongo DB
Mongo DBMongo DB
Mongo DB
dist_bp
 
Filesystem distribuído com hadoop!!!
Filesystem distribuído com hadoop!!! Filesystem distribuído com hadoop!!!
Filesystem distribuído com hadoop!!!
Alessandro Binhara
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
iMasters
 
Aula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframesAula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframes
ronaldorclamaster21
 
Hadoop
HadoopHadoop
Hadoop - Mãos à massa! Qcon2014
Hadoop - Mãos à massa! Qcon2014Hadoop - Mãos à massa! Qcon2014
Hadoop - Mãos à massa! Qcon2014
Thiago Santiago
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
Christiano Anderson
 
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
Ambiente Livre
 
Exemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduceExemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduce
Felipe
 

Semelhante a Desenvolvendo Aplicações baseadas em Big Data com PySpark (20)

Modelos de computação distribuída no Hadoop
Modelos de computação distribuída no HadoopModelos de computação distribuída no Hadoop
Modelos de computação distribuída no Hadoop
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
 
Seminário Hadoop
Seminário HadoopSeminário Hadoop
Seminário Hadoop
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
Treinamento Hadoop - dia2
Treinamento Hadoop - dia2Treinamento Hadoop - dia2
Treinamento Hadoop - dia2
 
Dados espaciais em R (2020)
Dados espaciais em R (2020)Dados espaciais em R (2020)
Dados espaciais em R (2020)
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Arquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigDataArquiteturas, Tecnologias e Desafios para Análise de BigData
Arquiteturas, Tecnologias e Desafios para Análise de BigData
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQL
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Filesystem distribuído com hadoop!!!
Filesystem distribuído com hadoop!!! Filesystem distribuído com hadoop!!!
Filesystem distribuído com hadoop!!!
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Aula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframesAula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframes
 
Hadoop
HadoopHadoop
Hadoop
 
Hadoop - Mãos à massa! Qcon2014
Hadoop - Mãos à massa! Qcon2014Hadoop - Mãos à massa! Qcon2014
Hadoop - Mãos à massa! Qcon2014
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
Pentaho com Hadoop – O Canivete Suíço do Cientistas de Dados para Big Data An...
 
Exemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduceExemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduce
 

Mais de Vinícius Barros

Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
Vinícius Barros
 
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Vinícius Barros
 
A importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big DataA importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big Data
Vinícius Barros
 
Introdução ao Apache Hadoop
Introdução ao Apache HadoopIntrodução ao Apache Hadoop
Introdução ao Apache Hadoop
Vinícius Barros
 
Apresentação LaSDPC
Apresentação LaSDPCApresentação LaSDPC
Apresentação LaSDPC
Vinícius Barros
 
Apresentação Programação Concorrente USP
Apresentação Programação Concorrente USPApresentação Programação Concorrente USP
Apresentação Programação Concorrente USP
Vinícius Barros
 
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
Vinícius Barros
 
Apresentação Coding Dojo em 10 minutos
Apresentação Coding Dojo em 10 minutosApresentação Coding Dojo em 10 minutos
Apresentação Coding Dojo em 10 minutos
Vinícius Barros
 

Mais de Vinícius Barros (8)

Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
Uma Abordagem para a Integração de Diferentes Fontes de Dados Provenientes de...
 
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
 
A importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big DataA importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big Data
 
Introdução ao Apache Hadoop
Introdução ao Apache HadoopIntrodução ao Apache Hadoop
Introdução ao Apache Hadoop
 
Apresentação LaSDPC
Apresentação LaSDPCApresentação LaSDPC
Apresentação LaSDPC
 
Apresentação Programação Concorrente USP
Apresentação Programação Concorrente USPApresentação Programação Concorrente USP
Apresentação Programação Concorrente USP
 
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
Implantação da ferramenta para manutenção de serviços "UFT Serviços" baseado ...
 
Apresentação Coding Dojo em 10 minutos
Apresentação Coding Dojo em 10 minutosApresentação Coding Dojo em 10 minutos
Apresentação Coding Dojo em 10 minutos
 

Desenvolvendo Aplicações baseadas em Big Data com PySpark

  • 2. Sobre Vinícius Aires Barros Ciência da Computação 2016 - UFT Mestrando em Ciência da Computação - ICMC USP Laboratório de Sistemas Distribuídos e Programação Concorrente - LaSDPC Áreas de Interesse: IoT, Distributed Systems, Big Data e Data Science. GitHub: @v4ires Website: http://viniciusaires.me E-mail: v4ires@gmail.com
  • 3. Big Data Sinônimo de grande volume de dados?
  • 4. “Big Data é definido como um conjunto de dados estruturados ou não estruturados que não puderam ser percebidos, adquiridos, gerenciados e processados pelos modelos tradicionais de hardware e software”.
  • 5. Conceitos ● Grandes Volumes de Dados ● Programação de Alto Desempenho (HPC) ● Dados Estruturados, Não Estruturados e Semiestruturados ● Bancos de Dados SQL e NoSQL ● MapReduce ● Apache Hadoop, Spark, etc.
  • 6. Timeline 6 Apache HadoopMapReduce 2003 Google File System 2004 2006 Spark UC Berkeley Lab 2009 Apache Spark 2013 Apache Spark se torna um projeto Top Level da Apache 2014
  • 8. Sistemas de Arquivos Distribuídos
  • 9. Bancos de Dados Distribuídos
  • 10. Casos de Uso ● Sistemas de Recomendação ● Aprendizagem de Máquina ● Processamento de Imagens ● Mineração de Dados ● etc.
  • 11. Desafios ● Escalabilidade ● Dados Complexos ● Interoperabilidade ● Latência ● Velocidade de Escrita em Disco e de RAM ● etc.
  • 12. Modelo de Programação MapReduce ● Google ● Programação Paralela/Disribuída; ● Funções: Map & Reduce; ● Simplificação dos modelos de programação paralela e concorrente tradicionais; ● Tolerância a falhas; ● Escalabilidade.
  • 14. Lightning-fast unified analytics engine Apache Spark
  • 15. O que é o Apache Spark? O Apache Spark é um software de código aberto mantido pela Apache Foundation que tem como propósito fornecer uma implementação livre e melhorada do modelo de programação MapReduce.
  • 16. Características ❏ Implementação em Scala ❏ Arquitetura Mestre Escravo (Master/Slave) ❏ Modelo de Programação MapReduce ❏ Resilient Distributed Dataset (RDD) ❏ Memória Principal (RAM) ❏ Processamento Distribuído ❏ Processamento em Tempo Real ❏ Escalável ❏ Tolerante a Falhas ❏ Integração com HDFS
  • 17. O que não é? ❏ Linguagem de Programação ❏ Solução Definitiva ❏ Substituto do Apache Hadoop
  • 22. Execução do Apache Spark 1. Acessem: http://github.com/v4ires/caipyra-2 018-pyspark 2. Tenham o docker instalado 3. Executem o Container 4. Pronto :)
  • 23. PySpark (Python + Spark) ● Interface de programação em Python ● Py4J (Interface de integração do Java com Python) ● Modo Iterativo de Programação ● Suporte a Python 2 e 3 ● Integração com Jupyter ● Integração com bibliotecas Python (Scipy, Matplotlib, Seaborn...)
  • 24. Operadores PySpark ● Transformações ○ Map ○ FlatMap ○ Filter ○ GroupByKey ○ outros. ● Ações: ○ Take ○ Count ○ Collect ○ outros.
  • 25.
  • 26. Exemplo Prático I WordCount (Contador de Palavras)
  • 28. Transformações Alguns exemplos de transformações com RDD
  • 29. Map A função de map é repetida em todas as linhas do RDD e gera um novo RDD como saída. Usando a transformação map(), utilizamos qualquer função, e essa função é aplicada a todos os elementos do RDD. Por exemplo, temos um RDD [1, 2, 3, 4, 5] se aplicarmos “rdd.map(x => x + 2)”, será obtido o resultado (3, 4, 5, 6, 7).
  • 30. FlatMap Na função flatMap() para cada elemento de entrada temos muitos elementos em um RDD de saída. O uso mais simples de flatMap() é dividir cada string de entrada em palavras. Map e flatMap são semelhantes na maneira que eles pegam uma linha da entrada RDD e aplicam uma função nessa linha. A principal diferença entre map() e flatMap() é que a função map() retorna apenas um elemento, enquanto flatMap() pode retornar uma lista de elementos.
  • 31. Filter A função RDD filter() retorna um novo RDD, contendo apenas os elementos que atendem a um predicado. Por exemplo, suponha que o RDD contenha primeiro cinco números naturais (1, 2, 3, 4 e 5) e o predicado é verificar os números pares. O RDD resultante após aplicar a função filter() conterá apenas os números pares, ou seja, 2 e 4.
  • 32. GroupByKey Quando usamos groupByKey() em um conjunto de dados de pares (K, V), os dados são embaralhados de acordo com o valor da chave K em um outro RDD.
  • 33. ReduceByKey Quando usamos reduceByKey em um dataset (K, V), os pares na mesma máquina com a mesma chave são combinados antes que os dados sejam embaralhados.
  • 34. Union Com a função union(), obtemos a união de dois RDD em um novo RDD. A principal regra dessa função é que os dois RDDs devem ser do mesmo tipo. Por exemplo, os elementos do RDD1 são {“Spark”, “Spark”, “Hadoop”, “Flink”} e os do RDD2 são {“Big data”, “Spark”, “Flink”}, portanto, o rdd1.union(rdd2) resultará nos seguintes elementos {“Spark”, “Spark”, “Spark”, “Hadoop”, “Flink”, “Flink”, “Big Data”}.
  • 35. SortByKey Quando aplicamos a função sortByKey() em um conjunto de dados de pares (K, V), os dados são classificados de acordo com a chave K em outro RDD.
  • 36. Ações Alguns exemplos de ações com RDD
  • 37. Take N A ação take(n) retorna n primeiros elementos do RDD. Por exemplo, considere o RDD {1, 2, 3, 4, 5, 6} neste RDD “take(4)” dará resultado {1, 2, 3, 4}.
  • 38. Top N A ação top(n) retorna n últimos elementos do RDD. Por exemplo, considere o RDD {1, 2, 3, 4, 5, 6} neste RDD “top(4)” dará resultado {6, 5, 4, 3}.
  • 39. Count A ação count() retorna o número de elementos no RDD. Por exemplo, o RDD possui valores {1, 2, 3, 4, 6} neste RDD a função “count ()” irá retornar o valor 6.
  • 40. Collect A ação collect() é a operação comum e simples que retorna todo o conteúdo de um RDD para um contexto de memória local. A ação collect() tem como restrição a capacidade de memória local de armazenar todos dos dados contidos em um RDD.
  • 41. Reduce A função reduce() pega grupos de elementos como entrada do RDD e, em seguida, produz a saída do mesmo tipo. Diversos operadores podem ser utilizados na operação de redução, por exemplo, adição, subtração, multiplicação, divisão, dentre outros.
  • 42. ForEach Quando temos uma situação em que queremos aplicar a operação em cada elemento do RDD, mas não deve retornar o valor para o driver. Neste caso, a função foreach() é útil. Por exemplo, inserindo um registro no banco de dados.
  • 44. K-Means ● Algoritmo de aprendizagem de Máquina Não Supervisionado ● Algoritmo de Agrupamento ou Clusterização ● Versão otimizada para uso de programação paralela/concorrente ● Medida de Distância (Similaridade de Dados)
  • 46. Obrigado! Dúvidas? Você pode me encontrar: ▸ @v4ires ▸ v4ires@gmail.com