SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Pré-processamento de
Grandes Dados com Apache
Spark
Rio Big Data Meetup - Novembro 2015
Felipe Almeida (falmeida1988@gmail.com | http://queirozf.com)
https://github.com/queirozfcom/rio-big-data-meetup-nov-2015
Estrutura da palestra
● Introdução
● O problema
● Spark
● Spark Dataframes
● Spark UDFs
● Spark ml
● Estudo de caso
2/28
Introdução
● Tarefas de mineração de dados e aprendizado de máquina só são
possíveis após uma etapa de pré-processamento.
● Pergunta: como pré-processar dados da ordem de muitos GB ou
TB?
● Hadoop e Spark
● As versões recentes do Spark adicionaram recursos úteis para
essas tarefas.
3/28
O problema
● Vamos tratar especificamente do problema de extração de
features
○ Isto é, transformar uma massa de dados em um conjunto de
dados onde cada amostra é representada por um vetor de
features
4/28
Spark
● Framework para computação em cluster, feito em Scala.
● Nasceu para resolver dois problemas do Hadoop:
○ Necessidade de persistir em disco após cada job
○ Difícil utilização para tarefas interativas
● Abstração principal: RDD
○ Um dataset distribuído nos nós do cluster
● Suporta várias operações além das famosas map e reduce
5/28
Spark
6/28
carrega um arquivo texto do HDFS
cada linha é transformada em uma lista de
palavras
exemplo de programa Spark usando Python (wordcount)
cada palavra é transformada em uma tupla
(palavra,1)
os pares com a mesma chave (i.e. mesma palavra) são
agrupados e somados
Spark DataFrames
● O módulo spark-sql adicionou o conceito de DataFrames
○ Como usado na linguagem R ou na biblioteca pandas (Python)
● Um DataFrame é comumente utilizado para representar um
dataset:
○ Linhas representam cada amostra (ponto)
○ Colunas representam cada feature
● Também é um RDD
○ Do tipo RDD[sql.Row]
○ Suporta também todas as operações de RDD
7/28
Spark DataFrames
● Esquema de um DataFrame NxD (N amostras, D features)
8/28
feature #1 feature #2 feature #3 ... feature #D
amostra #1 ...
amostra #2 ...
amostra #3 ...
... ... ... ... ... ...
amostra #N ...
Spark DataFrames
// dataframes moram neste módulo
import org.apache.spark.sql._
// construindo um sqlcontext a partir do sparkcontext
val sqlContext = new SQLContext(sc)
// carregando dados do S3 (schema inferido automaticamente)
val df = sqlContext.read.json("s3://path/to/dataset")
// select from dataframe where overall > 4.0
df.where(df("overall") > 4.0)
9/28
Spark DataFrames - transformações
Exemplo: feature scaling (normalização de features)
DataFrame original DataFrame modificado
aplicação da
transformação
de
normalização
10/28
feature #1 feature #2
amostra #1 2 400
amostra #2 4 200
amostra #3 6 400
feature #1 feature #2
amostra #1 0 1
amostra #2 0.5 0
amostra #3 1 1
Spark DataFrames - transformações
Exemplo: tokenização (separar texto em tokens)
DataFrame original DataFrame modificado
11/28
feature #1
amostra #1 “olá mundo!!”
amostra #2 “spark para grandes
dados”
amostra #3 “usando spark”
aplicação da
transformação
de tokenização
feature #1’
amostra #1 [“olá”, “mundo”]
amostra #2 [“spark”, “para”,
“grandes”, “dados”]
amostra #3 [“usando”,”spark”]
Spark UDFs
● UDFs: User-defined functions
○ São funções que atuam sobre uma coluna de um DataFrame
● Note a diferença com relações a funções como filter, map,
reduce que atuam sobre uma linha de um DataFrame
12/28
Spark UDFs
● UDFs podem ser usadas para criar colunas em um DataFrame:
import org.apache.spark.sql.functions.udf
// uma UDF que retorna o tamanho de uma string
val len = udf { str:String => str.length }
// aplicar a UDF len à coluna texto e criar uma
// nova coluna com o resultado
val df1 = df.withColumn("tamanho", len(df("texto"))
13/28
Spark UDFs
Resultado da aplicação da UDF len :
DataFrame df DataFrame df1
14/28
texto
amostra #1 “foo”
amostra #2 “foo bar”
amostra #3 “oi”
aplicação da
UDF len
tamanho
amostra #1 3
amostra #2 7
amostra #3 2
Spark ml
15/28
● spark.ml é um componente do módulo spark-mllib
● Disponibiliza, entre outras coisas, várias transformações baseadas em
UDFs para manipular um DataFrame
● Entre elas:
○ RegexTokenizer
○ OneHotEncoder
○ StringIndexer
○ MinMaxScaler
○ Bucketizer
Spark ml
● RegexTokenizer (String => Vector[String])
○ Tokeniza strings usando uma regex como delimitador
DataFrame df DataFrame df1
16/28
texto
amostra #1 “foo,bar”
amostra #2 “bar baz”
amostra #3 “foo.bar.baz”
aplicação do
RegexTokenizer
usando a regex
/s+|,|./ como
delimitador
tokens
amostra #1 [“foo”,”bar”]
amostra #2 [“bar”,”baz”]
amostra #3 [“foo”,”bar”,”baz”]
Spark ml
● StringIndexer (String => Double)
○ Transforma valores únicos em índices numéricos
DataFrame df DataFrame df1
17/28
feature #1
amostra #1 “amarelo”
amostra #2 “azul”
amostra #3 “verde”
amostra #4 “amarelo”
aplicação do
StringIndexer
feature #1 mod
amostra #1 0.0
amostra #2 1.0
amostra #3 2.0
amostra #4 0.0
Spark ml
● OneHotEncoder (Double => Vector[Double])
○ Transforma índices de features em um domínio em um vetor one-hot
DataFrame df DataFrame df1
18/28
aplicação do
OneHotEncoder
feature #1
amostra #1 0.0
amostra #2 1.0
amostra #3 2.0
amostra #4 0.0
feature #1 mod
amostra #1 [1.0,0.0,0.0]
amostra #2 [0.0,1.0,0.0]
amostra #3 [0.0,0.0,1.0]
amostra #4 [1.0,0.0,0.0]
Spark ml
● MinMaxScaler (Vector[Double] => Vector[Double])
○ Normaliza os valores de uma coluna para o range [0,1]
DataFrame df DataFrame df1
19/28
aplicação do
MinMaxScaler
feature #1
amostra #1 [2.0,800]
amostra #2 [4.0,1200]
amostra #3 [8.0,600]
amostra #4 [16.0,200]
feature #1
amostra #1 [0.0,0.6]
amostra #2 [0.14,1.0]
amostra #3 [0.43,0.4]
amostra #4 [1.0,0.0]
Spark ml
● Bucketizer (Double => Double)
○ Discretiza features contínuas, usando limites
DataFrame df DataFrame df1
20/28
aplicação do
Bucketizer usando
os limites 100, 200,
500, 2000 e 5000
feature #1
amostra #1 329.23
amostra #2 123.38
amostra #3 3289.57
amostra #4 1982.376
feature #1’
amostra #1 1.0
amostra #2 0.0
amostra #3 3.0
amostra #4 2.0
Estudo de caso: Reviews Amazon
● Um estudo de caso mostrando várias etapas possíveis para um
dataset real
● Não é um processo completo, apenas alguns passos para motivar
os ouvintes e dar uma ideia das quantidades envolvidas
○ Usa UDFs e também o módulo spark-mllib
● Código completo em https://github.com/queirozfcom/rio-big-data-
meetup-nov-2015
○ Incluindo a criação dos clusters usando AWS EMR
21/28
O dataset
Cada elemento é uma review de um produto na Amazon.com
● ~ 55 Gb (após desempacotamento)
● ~ 82 Milhões de Reviews
● Maio/1996 - Julho/2014
● Formato Json
● Link: http://jmcauley.ucsd.edu/data/amazon/
22/28
O dataset
● Elemento de exemplo:
{
"reviewerID": "A2SUAM",
"asin": "00000",
"reviewerName": "J. McDonald",
"helpful": [2, 3],
"reviewText": "I bought this for ...",
"overall": 5.0,
"summary": "Heavenly Highway!",
"unixReviewTime": 1252800000
}
23/28
Passos do Pipeline de exemplo
1. Retirar linhas com elementos null
2. Adicionar features para:
a. O tamanho do texto do reviewText e do summary
b. Período do dia em que a review for feita (dia/noite)
c. Período da semana em que a review foi feita (dia útil/fim
de semana)
3. Juntar todo o texto corrido (reviewText + summary) em um único
campo, passar para minúsculas, tokenizar e transformar em um
vetor de frequências (TF)
4. Normalizar a nota (atributo overall)
5. Transformar o atributo helpful em um float e normalizar
24/28
Dicas Gerais / Lições aprendidas
● É melhor criar uma máquina EC2, baixar o dataset para ela e, de
lá, fazer upload para o S3
○ Se estiverem na mesma área, o processo é muito mais rápido
● Se usar AWS EMR, cuidado para não esquecer o cluster ligado!
○ Use --auto-terminate
● Habilitar dynamicAllocation
● Recomendo a API Scala pois as outras às vezes ficam defasadas
25/28
Mais informações
● Todo o código foi rodado no ambiente da AWS, usando o serviço
EMR (Elastic MapReduce), com o build emr-4.0.1
○ Todo o código usado pode ser obtido em https://github.
com/queirozfcom/rio-big-data-meetup-nov-2015
● Guia para criar um cluster Spark usando o serviço AWS Elastic
MapReduce (EMR)
● Guia para usar o Apache Zeppelin no AWS EMR
● Guia para criar UDFs (User-defined Functions) no Spark/pyspark
26/28
FIM
27/28
Agradecimentos
● Professor Alexandre Assis DSc. (orientador do trabalho original)
○ PESC/COPPE UFRJ
● Rosângela Oliveira (colega no trabalho original)
○ rmsilva@cos.ufrj.br
● Julian McAuley PhD. (fornecimento do dataset)
28/28

Mais conteúdo relacionado

Mais procurados

Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados ConceitosCleber Ramos
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLVillu Ruusmann
 
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Spark Summit
 
Koalas: Making an Easy Transition from Pandas to Apache Spark
Koalas: Making an Easy Transition from Pandas to Apache SparkKoalas: Making an Easy Transition from Pandas to Apache Spark
Koalas: Making an Easy Transition from Pandas to Apache SparkDatabricks
 
PySpark in practice slides
PySpark in practice slidesPySpark in practice slides
PySpark in practice slidesDat Tran
 
Lição 10 - O discípulo e o discipulado
Lição 10 - O discípulo e o discipuladoLição 10 - O discípulo e o discipulado
Lição 10 - O discípulo e o discipuladoErberson Pinheiro
 
Big Data Processing with Spark and Scala
Big Data Processing with Spark and Scala Big Data Processing with Spark and Scala
Big Data Processing with Spark and Scala Edureka!
 
Lição 3 ebd- a santissima trindade
Lição 3   ebd- a santissima trindadeLição 3   ebd- a santissima trindade
Lição 3 ebd- a santissima trindadeRODRIGO FERREIRA
 
Spark SQL Bucketing at Facebook
 Spark SQL Bucketing at Facebook Spark SQL Bucketing at Facebook
Spark SQL Bucketing at FacebookDatabricks
 
Conceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosConceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosBruno Pereira
 
Optimizing Apache Spark UDFs
Optimizing Apache Spark UDFsOptimizing Apache Spark UDFs
Optimizing Apache Spark UDFsDatabricks
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentesomenar
 
Emr spark tuning demystified
Emr spark tuning demystifiedEmr spark tuning demystified
Emr spark tuning demystifiedOmid Vahdaty
 
ckan 2.0: Harvesting from other sources
ckan 2.0: Harvesting from other sourcesckan 2.0: Harvesting from other sources
ckan 2.0: Harvesting from other sourcesChengjen Lee
 
Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?Priscilla Aguiar
 

Mais procurados (20)

Introdução a ciência de dados com Python
Introdução a ciência de dados com PythonIntrodução a ciência de dados com Python
Introdução a ciência de dados com Python
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados Conceitos
 
Manual escola de lideres
Manual escola de lideresManual escola de lideres
Manual escola de lideres
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Catalyst optimizer
Catalyst optimizerCatalyst optimizer
Catalyst optimizer
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMML
 
Aula 4 banco de dados
Aula 4   banco de dados Aula 4   banco de dados
Aula 4 banco de dados
 
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
 
Koalas: Making an Easy Transition from Pandas to Apache Spark
Koalas: Making an Easy Transition from Pandas to Apache SparkKoalas: Making an Easy Transition from Pandas to Apache Spark
Koalas: Making an Easy Transition from Pandas to Apache Spark
 
PySpark in practice slides
PySpark in practice slidesPySpark in practice slides
PySpark in practice slides
 
Lição 10 - O discípulo e o discipulado
Lição 10 - O discípulo e o discipuladoLição 10 - O discípulo e o discipulado
Lição 10 - O discípulo e o discipulado
 
Big Data Processing with Spark and Scala
Big Data Processing with Spark and Scala Big Data Processing with Spark and Scala
Big Data Processing with Spark and Scala
 
Lição 3 ebd- a santissima trindade
Lição 3   ebd- a santissima trindadeLição 3   ebd- a santissima trindade
Lição 3 ebd- a santissima trindade
 
Spark SQL Bucketing at Facebook
 Spark SQL Bucketing at Facebook Spark SQL Bucketing at Facebook
Spark SQL Bucketing at Facebook
 
Conceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosConceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dados
 
Optimizing Apache Spark UDFs
Optimizing Apache Spark UDFsOptimizing Apache Spark UDFs
Optimizing Apache Spark UDFs
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
 
Emr spark tuning demystified
Emr spark tuning demystifiedEmr spark tuning demystified
Emr spark tuning demystified
 
ckan 2.0: Harvesting from other sources
ckan 2.0: Harvesting from other sourcesckan 2.0: Harvesting from other sources
ckan 2.0: Harvesting from other sources
 
Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?Como especificar requisitos em metodologias ágeis?
Como especificar requisitos em metodologias ágeis?
 

Semelhante a Pré processamento de grandes dados com Apache Spark

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 reduceFelipe
 
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...Marcio Machado Pereira
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...Eiti Kimura
 
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 - MongoDBiMasters
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLpgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLRaphael Silva
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 

Semelhante a Pré processamento de grandes dados com Apache Spark (20)

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
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
 
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
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLpgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 

Mais de Felipe

Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingFelipe
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFelipe
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplosFelipe
 
Cloud Certifications - Overview
Cloud Certifications - OverviewCloud Certifications - Overview
Cloud Certifications - OverviewFelipe
 
Elasticsearch for Data Analytics
Elasticsearch for Data AnalyticsElasticsearch for Data Analytics
Elasticsearch for Data AnalyticsFelipe
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsFelipe
 
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsCloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsFelipe
 
Online Machine Learning: introduction and examples
Online Machine Learning:  introduction and examplesOnline Machine Learning:  introduction and examples
Online Machine Learning: introduction and examplesFelipe
 
Aws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsAws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsFelipe
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Felipe
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
Rachinations
RachinationsRachinations
RachinationsFelipe
 
Ausgewählte preußische Tugenden
Ausgewählte preußische TugendenAusgewählte preußische Tugenden
Ausgewählte preußische TugendenFelipe
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play frameworkFelipe
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoFelipe
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementFelipe
 
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantDevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantFelipe
 
D3.js 30-minute intro
D3.js   30-minute introD3.js   30-minute intro
D3.js 30-minute introFelipe
 

Mais de Felipe (18)

Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic tagging
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with Examples
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplos
 
Cloud Certifications - Overview
Cloud Certifications - OverviewCloud Certifications - Overview
Cloud Certifications - Overview
 
Elasticsearch for Data Analytics
Elasticsearch for Data AnalyticsElasticsearch for Data Analytics
Elasticsearch for Data Analytics
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and Alarms
 
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsCloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
 
Online Machine Learning: introduction and examples
Online Machine Learning:  introduction and examplesOnline Machine Learning:  introduction and examples
Online Machine Learning: introduction and examples
 
Aws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsAws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and tools
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Rachinations
RachinationsRachinations
Rachinations
 
Ausgewählte preußische Tugenden
Ausgewählte preußische TugendenAusgewählte preußische Tugenden
Ausgewählte preußische Tugenden
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration management
 
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantDevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
 
D3.js 30-minute intro
D3.js   30-minute introD3.js   30-minute intro
D3.js 30-minute intro
 

Pré processamento de grandes dados com Apache Spark

  • 1. Pré-processamento de Grandes Dados com Apache Spark Rio Big Data Meetup - Novembro 2015 Felipe Almeida (falmeida1988@gmail.com | http://queirozf.com) https://github.com/queirozfcom/rio-big-data-meetup-nov-2015
  • 2. Estrutura da palestra ● Introdução ● O problema ● Spark ● Spark Dataframes ● Spark UDFs ● Spark ml ● Estudo de caso 2/28
  • 3. Introdução ● Tarefas de mineração de dados e aprendizado de máquina só são possíveis após uma etapa de pré-processamento. ● Pergunta: como pré-processar dados da ordem de muitos GB ou TB? ● Hadoop e Spark ● As versões recentes do Spark adicionaram recursos úteis para essas tarefas. 3/28
  • 4. O problema ● Vamos tratar especificamente do problema de extração de features ○ Isto é, transformar uma massa de dados em um conjunto de dados onde cada amostra é representada por um vetor de features 4/28
  • 5. Spark ● Framework para computação em cluster, feito em Scala. ● Nasceu para resolver dois problemas do Hadoop: ○ Necessidade de persistir em disco após cada job ○ Difícil utilização para tarefas interativas ● Abstração principal: RDD ○ Um dataset distribuído nos nós do cluster ● Suporta várias operações além das famosas map e reduce 5/28
  • 6. Spark 6/28 carrega um arquivo texto do HDFS cada linha é transformada em uma lista de palavras exemplo de programa Spark usando Python (wordcount) cada palavra é transformada em uma tupla (palavra,1) os pares com a mesma chave (i.e. mesma palavra) são agrupados e somados
  • 7. Spark DataFrames ● O módulo spark-sql adicionou o conceito de DataFrames ○ Como usado na linguagem R ou na biblioteca pandas (Python) ● Um DataFrame é comumente utilizado para representar um dataset: ○ Linhas representam cada amostra (ponto) ○ Colunas representam cada feature ● Também é um RDD ○ Do tipo RDD[sql.Row] ○ Suporta também todas as operações de RDD 7/28
  • 8. Spark DataFrames ● Esquema de um DataFrame NxD (N amostras, D features) 8/28 feature #1 feature #2 feature #3 ... feature #D amostra #1 ... amostra #2 ... amostra #3 ... ... ... ... ... ... ... amostra #N ...
  • 9. Spark DataFrames // dataframes moram neste módulo import org.apache.spark.sql._ // construindo um sqlcontext a partir do sparkcontext val sqlContext = new SQLContext(sc) // carregando dados do S3 (schema inferido automaticamente) val df = sqlContext.read.json("s3://path/to/dataset") // select from dataframe where overall > 4.0 df.where(df("overall") > 4.0) 9/28
  • 10. Spark DataFrames - transformações Exemplo: feature scaling (normalização de features) DataFrame original DataFrame modificado aplicação da transformação de normalização 10/28 feature #1 feature #2 amostra #1 2 400 amostra #2 4 200 amostra #3 6 400 feature #1 feature #2 amostra #1 0 1 amostra #2 0.5 0 amostra #3 1 1
  • 11. Spark DataFrames - transformações Exemplo: tokenização (separar texto em tokens) DataFrame original DataFrame modificado 11/28 feature #1 amostra #1 “olá mundo!!” amostra #2 “spark para grandes dados” amostra #3 “usando spark” aplicação da transformação de tokenização feature #1’ amostra #1 [“olá”, “mundo”] amostra #2 [“spark”, “para”, “grandes”, “dados”] amostra #3 [“usando”,”spark”]
  • 12. Spark UDFs ● UDFs: User-defined functions ○ São funções que atuam sobre uma coluna de um DataFrame ● Note a diferença com relações a funções como filter, map, reduce que atuam sobre uma linha de um DataFrame 12/28
  • 13. Spark UDFs ● UDFs podem ser usadas para criar colunas em um DataFrame: import org.apache.spark.sql.functions.udf // uma UDF que retorna o tamanho de uma string val len = udf { str:String => str.length } // aplicar a UDF len à coluna texto e criar uma // nova coluna com o resultado val df1 = df.withColumn("tamanho", len(df("texto")) 13/28
  • 14. Spark UDFs Resultado da aplicação da UDF len : DataFrame df DataFrame df1 14/28 texto amostra #1 “foo” amostra #2 “foo bar” amostra #3 “oi” aplicação da UDF len tamanho amostra #1 3 amostra #2 7 amostra #3 2
  • 15. Spark ml 15/28 ● spark.ml é um componente do módulo spark-mllib ● Disponibiliza, entre outras coisas, várias transformações baseadas em UDFs para manipular um DataFrame ● Entre elas: ○ RegexTokenizer ○ OneHotEncoder ○ StringIndexer ○ MinMaxScaler ○ Bucketizer
  • 16. Spark ml ● RegexTokenizer (String => Vector[String]) ○ Tokeniza strings usando uma regex como delimitador DataFrame df DataFrame df1 16/28 texto amostra #1 “foo,bar” amostra #2 “bar baz” amostra #3 “foo.bar.baz” aplicação do RegexTokenizer usando a regex /s+|,|./ como delimitador tokens amostra #1 [“foo”,”bar”] amostra #2 [“bar”,”baz”] amostra #3 [“foo”,”bar”,”baz”]
  • 17. Spark ml ● StringIndexer (String => Double) ○ Transforma valores únicos em índices numéricos DataFrame df DataFrame df1 17/28 feature #1 amostra #1 “amarelo” amostra #2 “azul” amostra #3 “verde” amostra #4 “amarelo” aplicação do StringIndexer feature #1 mod amostra #1 0.0 amostra #2 1.0 amostra #3 2.0 amostra #4 0.0
  • 18. Spark ml ● OneHotEncoder (Double => Vector[Double]) ○ Transforma índices de features em um domínio em um vetor one-hot DataFrame df DataFrame df1 18/28 aplicação do OneHotEncoder feature #1 amostra #1 0.0 amostra #2 1.0 amostra #3 2.0 amostra #4 0.0 feature #1 mod amostra #1 [1.0,0.0,0.0] amostra #2 [0.0,1.0,0.0] amostra #3 [0.0,0.0,1.0] amostra #4 [1.0,0.0,0.0]
  • 19. Spark ml ● MinMaxScaler (Vector[Double] => Vector[Double]) ○ Normaliza os valores de uma coluna para o range [0,1] DataFrame df DataFrame df1 19/28 aplicação do MinMaxScaler feature #1 amostra #1 [2.0,800] amostra #2 [4.0,1200] amostra #3 [8.0,600] amostra #4 [16.0,200] feature #1 amostra #1 [0.0,0.6] amostra #2 [0.14,1.0] amostra #3 [0.43,0.4] amostra #4 [1.0,0.0]
  • 20. Spark ml ● Bucketizer (Double => Double) ○ Discretiza features contínuas, usando limites DataFrame df DataFrame df1 20/28 aplicação do Bucketizer usando os limites 100, 200, 500, 2000 e 5000 feature #1 amostra #1 329.23 amostra #2 123.38 amostra #3 3289.57 amostra #4 1982.376 feature #1’ amostra #1 1.0 amostra #2 0.0 amostra #3 3.0 amostra #4 2.0
  • 21. Estudo de caso: Reviews Amazon ● Um estudo de caso mostrando várias etapas possíveis para um dataset real ● Não é um processo completo, apenas alguns passos para motivar os ouvintes e dar uma ideia das quantidades envolvidas ○ Usa UDFs e também o módulo spark-mllib ● Código completo em https://github.com/queirozfcom/rio-big-data- meetup-nov-2015 ○ Incluindo a criação dos clusters usando AWS EMR 21/28
  • 22. O dataset Cada elemento é uma review de um produto na Amazon.com ● ~ 55 Gb (após desempacotamento) ● ~ 82 Milhões de Reviews ● Maio/1996 - Julho/2014 ● Formato Json ● Link: http://jmcauley.ucsd.edu/data/amazon/ 22/28
  • 23. O dataset ● Elemento de exemplo: { "reviewerID": "A2SUAM", "asin": "00000", "reviewerName": "J. McDonald", "helpful": [2, 3], "reviewText": "I bought this for ...", "overall": 5.0, "summary": "Heavenly Highway!", "unixReviewTime": 1252800000 } 23/28
  • 24. Passos do Pipeline de exemplo 1. Retirar linhas com elementos null 2. Adicionar features para: a. O tamanho do texto do reviewText e do summary b. Período do dia em que a review for feita (dia/noite) c. Período da semana em que a review foi feita (dia útil/fim de semana) 3. Juntar todo o texto corrido (reviewText + summary) em um único campo, passar para minúsculas, tokenizar e transformar em um vetor de frequências (TF) 4. Normalizar a nota (atributo overall) 5. Transformar o atributo helpful em um float e normalizar 24/28
  • 25. Dicas Gerais / Lições aprendidas ● É melhor criar uma máquina EC2, baixar o dataset para ela e, de lá, fazer upload para o S3 ○ Se estiverem na mesma área, o processo é muito mais rápido ● Se usar AWS EMR, cuidado para não esquecer o cluster ligado! ○ Use --auto-terminate ● Habilitar dynamicAllocation ● Recomendo a API Scala pois as outras às vezes ficam defasadas 25/28
  • 26. Mais informações ● Todo o código foi rodado no ambiente da AWS, usando o serviço EMR (Elastic MapReduce), com o build emr-4.0.1 ○ Todo o código usado pode ser obtido em https://github. com/queirozfcom/rio-big-data-meetup-nov-2015 ● Guia para criar um cluster Spark usando o serviço AWS Elastic MapReduce (EMR) ● Guia para usar o Apache Zeppelin no AWS EMR ● Guia para criar UDFs (User-defined Functions) no Spark/pyspark 26/28
  • 28. Agradecimentos ● Professor Alexandre Assis DSc. (orientador do trabalho original) ○ PESC/COPPE UFRJ ● Rosângela Oliveira (colega no trabalho original) ○ rmsilva@cos.ufrj.br ● Julian McAuley PhD. (fornecimento do dataset) 28/28