SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Spark - Básico
Aula 9
Quem sou eu?
2
Eu sou Rodrigo Augusto Rebouças.
Engenheiro de dados da Semantix
Instrutor do Semantix Mentoring Academy
Você pode me encontrar em:
rodrigo.augusto@semantix.com.br
Processamento de Dados
Spark
Processamento de Dados
4
o Map Reduce
o Spark
o Fink
Apache Spark
o Plataforma de computação em cluster
• Suporte
o MapReduce
o Streaming
o Análises interativas
• Execução em memória
• Compatível com Hadoop
o Funciona com YARN
o Acessar os dados
• HDFS
• Tabelas Hive
• Tabelas Hbase
o Linguagem: Scala, Java, Python e R
5
Spark História
o 2009
• Projeto de pesquisa na Universidade da California, Berkeley
o AMPLab
o 2010
• Open source
o 2013
• Apache
o Representação dos dados
• RDD - 2011
• Dataframe - 2013
• Dataset - 2015
• Qual a melhor forma de trabalhar com dados no Spark?
6
Estrutura e inicialização
Spark Ferramentas
o Spark
• ETL e processamento em batch
o Spark SQL
• Consultas em dados estruturados
o Spark Streaming
• Processamento de stream
o Spark MLib
• Machine Learning
o Spark GraphX
• Processamento de grafos
8
Spark Shell
o Ambiente Spark interativo
o Inicialização no Cluster
• pyspark para Python
• spark-shell para Scala
o Se existir a instalação da versão 1 e 2 no cluster
• Versão 1
o pyspark para Python
o spark-shell para Scala
• Versão 2
o pyspark2 para Python
o spark2-shell para Scala
9
DataFrame
Introdução
DataFrame Indrodução
o Representação de dados no spark
o DataFrames
• Dados estruturados e semiestruturados em forma tabular
• Java, Scala e Python
• Operações
o Transformação
o Ação
11
Leitura
DataFrame
DataFrame Leitura de arquivo
o Dados suportados para leitura e escrita no DataFrame
• Text files
o CSV
o JSON
o Plain text
• Binary format files
o Apache Parquet (Muito utilizado)
o Apache ORC
• Tables
o Hive metastore
o JDBC
• Configurar outros tipos
13
DataFrame Leitura de arquivo
14
o val <dataframe> = spark.read.<formato>(“<arquivo>”)
• <formato>
o textFile(“arquivo.txt”)
o csv(“arquivo.csv”)
o jdbc(jdbcUrl, "bd.tabela", connectionProperties)
o load ou parquet(“arquivo.parquet”)
o table(“tabelaHive”)
o json(“arquivo.json“)
o orc(“arquivo.orc”)
• <arquivo>
o “diretório/”
o “diretório/*.log”
o “arq1.txt, arq2.txt”
o “arq*”
DataFrame Leitura de arquivo
o val <dataframe> = spark.read.format("<formato>").load("<arquivo>")
o Opções para configurar o arquivo de leitura
• spark.read.option(...)
scala> val userDF = spark.read.json(“user.json”)
scala> val userDF = spark.read.format(“json”).load(“usr.json”)
15
Ações
DataFrame
DataFrame Operações
o Ação
• count: retorna o número de linhas
• first: retorna a primeira linha
• take(n): retorna as primeiras n linhas como um array
• show(n): exibe as primeiras n linhas da tabela
• collect: Trazer toda a informação dos nós do drive
o Cuidado para não estourar a memória
• distincts: retorna os registros, removendo os repetidos
• write: salvar os dados
• printSchema() Visualizar a estrutura dos dados
o DataFrame sempre tem um esquema associado
DataFrame Exemplo ações
o <dataframe>.<ação>
scala> val clienteDF = spark.read.json("cliente.json")
scala> clienteDF.printSchema()
scala> clienteDF.count()
scala> clienteDF.first()
scala> clienteDF.take(5)
scala> clienteDF.show(5)
scala> clienteDF.distinct()
scala> clienteDF.collect() //Cuidado para estourar memória
DataFrame Salvar Dado
o dadosDF.write.
• save(“arquivoParquet”)
• json("arquivoJson")
• csv(“arquivocsv”)
• saveAsTable("tableHive")
o (/user/hive/warehouse)
scala> dadosDF.write.save(“outputData”)
$ hdfs dfs -ls /user/cloudera/outputData
scala> dadosDF.write. 
mode("append"). 
option("path","/user/root"). 
saveAsTable("outputData")
Transformações
DataFrame
DataFrame Operações
o Transformação
• Imutáveis
o Dados no DataFrame nunca são modificados
• Exemplos
o select: Selecionar os atributos
o where: Filtrar os atributos
o orderBy: Ordenar os dados por atributo
o groupBy: Agrupar os dados por atributo
o join: Mesclar Dados
o limit(n): Limitar a quantidade de registros
DataFrame Transformações
o Transformação individual
• <dataframe>.<ação>
o Sequência de transformações
• <dataframe>.<ação>.<ação>.<ação>.<ação>
scala> val prodQtdDF = prodDF.select("nome","qtd")
scala> val qtd50DF = prodQtdDF.where("qtd > 50")
scala> val qtd50ordDF = qtd50DF.orderBy(“nome”)
scala> qtd50ordDF.show()
scala> prodDF.select("nome","qtd").where("qtd > 50").orderBy(“nome”)
DataFrame – Transformações
o Agrupar (groupBy) com uma função de agregação
• count
• max
• min
• mean
• sum
• pivot
• agg (Funções de agregação adicional)
scala> peopleDF.groupBy(“setor").count()
scala> peopled.show()
DataFrame – Transformações
o Acessar o atributo do dado
• “<atributo>”
• $“<atributo>”
• <dataframe>(“<atributo>”)
scala> prodDF.select("nome","qtd").show()
scala> prodDF.select($"nome", $“qtd” * 0,1).show()
scala> prodDF.where(prodDF("nome").startsWith("A")).show()
Laboratório
Resolução de Exercícios
Exercícios DataFrame
26
1. Enviar o diretório local “/input/exercises-data/juros_selic” para o HDFS em “/user/aluno/<nome>/data”
2. Criar o DataFrame jurosDF para ler o arquivo no HDFS “/user/aluno/<nome>/data/juros_selic/juros_selic.json”
3. Visualizar o Schema do jurosDF
4. Mostrar os 5 primeiros registros do jutosDF
5. Contar a quantidade de registros do jurosDF
6. Criar o DataFrame jurosDF10 para filtrar apenas os registros com o campo “valor” maior que 10
7. Salvar o DataFrame jurosDF10 como tabela Hive “<nome>.tab_juros_selic”
8. Criar o DataFrame jurosHiveDF para ler a tabela “<nome>.tab_juros_selic”
9. Visualizar o Schema do jurosHiveDF
10. Mostrar os 5 primeiros registros do jurosHiveDF
11. Salvar o DataFrame jurosHiveDF no HDFS no diretório “/user/aluno/nome/data/save_juros” no formato parquet
12. Visualizar o save_juros no HDFS
13. Criar o DataFrame jurosHDFS para mostrar o “save_juros” da questão 8
14. Visualizar o Schema do jurosHDFS
15. Mostrar os 5 primeiros registros do jurosHDFS
Obrigado!
Alguma pergunta?
Você pode me encontrar em:
rodrigo.augusto@semantix.com.br

Mais conteúdo relacionado

Semelhante a Aula9-Spark-Básico sematix com dataframes

Desenvolvendo Aplicações baseadas em Big Data com PySpark
Desenvolvendo Aplicações baseadas em Big Data com PySparkDesenvolvendo Aplicações baseadas em Big Data com PySpark
Desenvolvendo Aplicações baseadas em Big Data com PySparkVinícius Barros
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objetoelliando dias
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb javaFabiano Modos
 
TDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyTDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyLeonardo Zanivan
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLpichiliani
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 

Semelhante a Aula9-Spark-Básico sematix com dataframes (20)

Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
Desenvolvendo Aplicações baseadas em Big Data com PySpark
Desenvolvendo Aplicações baseadas em Big Data com PySparkDesenvolvendo Aplicações baseadas em Big Data com PySpark
Desenvolvendo Aplicações baseadas em Big Data com PySpark
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objeto
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
TDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyTDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com Wildfly
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Apache poi
Apache poiApache poi
Apache poi
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQL
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 

Aula9-Spark-Básico sematix com dataframes

  • 2. Quem sou eu? 2 Eu sou Rodrigo Augusto Rebouças. Engenheiro de dados da Semantix Instrutor do Semantix Mentoring Academy Você pode me encontrar em: rodrigo.augusto@semantix.com.br
  • 4. Processamento de Dados 4 o Map Reduce o Spark o Fink
  • 5. Apache Spark o Plataforma de computação em cluster • Suporte o MapReduce o Streaming o Análises interativas • Execução em memória • Compatível com Hadoop o Funciona com YARN o Acessar os dados • HDFS • Tabelas Hive • Tabelas Hbase o Linguagem: Scala, Java, Python e R 5
  • 6. Spark História o 2009 • Projeto de pesquisa na Universidade da California, Berkeley o AMPLab o 2010 • Open source o 2013 • Apache o Representação dos dados • RDD - 2011 • Dataframe - 2013 • Dataset - 2015 • Qual a melhor forma de trabalhar com dados no Spark? 6
  • 8. Spark Ferramentas o Spark • ETL e processamento em batch o Spark SQL • Consultas em dados estruturados o Spark Streaming • Processamento de stream o Spark MLib • Machine Learning o Spark GraphX • Processamento de grafos 8
  • 9. Spark Shell o Ambiente Spark interativo o Inicialização no Cluster • pyspark para Python • spark-shell para Scala o Se existir a instalação da versão 1 e 2 no cluster • Versão 1 o pyspark para Python o spark-shell para Scala • Versão 2 o pyspark2 para Python o spark2-shell para Scala 9
  • 11. DataFrame Indrodução o Representação de dados no spark o DataFrames • Dados estruturados e semiestruturados em forma tabular • Java, Scala e Python • Operações o Transformação o Ação 11
  • 13. DataFrame Leitura de arquivo o Dados suportados para leitura e escrita no DataFrame • Text files o CSV o JSON o Plain text • Binary format files o Apache Parquet (Muito utilizado) o Apache ORC • Tables o Hive metastore o JDBC • Configurar outros tipos 13
  • 14. DataFrame Leitura de arquivo 14 o val <dataframe> = spark.read.<formato>(“<arquivo>”) • <formato> o textFile(“arquivo.txt”) o csv(“arquivo.csv”) o jdbc(jdbcUrl, "bd.tabela", connectionProperties) o load ou parquet(“arquivo.parquet”) o table(“tabelaHive”) o json(“arquivo.json“) o orc(“arquivo.orc”) • <arquivo> o “diretório/” o “diretório/*.log” o “arq1.txt, arq2.txt” o “arq*”
  • 15. DataFrame Leitura de arquivo o val <dataframe> = spark.read.format("<formato>").load("<arquivo>") o Opções para configurar o arquivo de leitura • spark.read.option(...) scala> val userDF = spark.read.json(“user.json”) scala> val userDF = spark.read.format(“json”).load(“usr.json”) 15
  • 17. DataFrame Operações o Ação • count: retorna o número de linhas • first: retorna a primeira linha • take(n): retorna as primeiras n linhas como um array • show(n): exibe as primeiras n linhas da tabela • collect: Trazer toda a informação dos nós do drive o Cuidado para não estourar a memória • distincts: retorna os registros, removendo os repetidos • write: salvar os dados • printSchema() Visualizar a estrutura dos dados o DataFrame sempre tem um esquema associado
  • 18. DataFrame Exemplo ações o <dataframe>.<ação> scala> val clienteDF = spark.read.json("cliente.json") scala> clienteDF.printSchema() scala> clienteDF.count() scala> clienteDF.first() scala> clienteDF.take(5) scala> clienteDF.show(5) scala> clienteDF.distinct() scala> clienteDF.collect() //Cuidado para estourar memória
  • 19. DataFrame Salvar Dado o dadosDF.write. • save(“arquivoParquet”) • json("arquivoJson") • csv(“arquivocsv”) • saveAsTable("tableHive") o (/user/hive/warehouse) scala> dadosDF.write.save(“outputData”) $ hdfs dfs -ls /user/cloudera/outputData scala> dadosDF.write. mode("append"). option("path","/user/root"). saveAsTable("outputData")
  • 21. DataFrame Operações o Transformação • Imutáveis o Dados no DataFrame nunca são modificados • Exemplos o select: Selecionar os atributos o where: Filtrar os atributos o orderBy: Ordenar os dados por atributo o groupBy: Agrupar os dados por atributo o join: Mesclar Dados o limit(n): Limitar a quantidade de registros
  • 22. DataFrame Transformações o Transformação individual • <dataframe>.<ação> o Sequência de transformações • <dataframe>.<ação>.<ação>.<ação>.<ação> scala> val prodQtdDF = prodDF.select("nome","qtd") scala> val qtd50DF = prodQtdDF.where("qtd > 50") scala> val qtd50ordDF = qtd50DF.orderBy(“nome”) scala> qtd50ordDF.show() scala> prodDF.select("nome","qtd").where("qtd > 50").orderBy(“nome”)
  • 23. DataFrame – Transformações o Agrupar (groupBy) com uma função de agregação • count • max • min • mean • sum • pivot • agg (Funções de agregação adicional) scala> peopleDF.groupBy(“setor").count() scala> peopled.show()
  • 24. DataFrame – Transformações o Acessar o atributo do dado • “<atributo>” • $“<atributo>” • <dataframe>(“<atributo>”) scala> prodDF.select("nome","qtd").show() scala> prodDF.select($"nome", $“qtd” * 0,1).show() scala> prodDF.where(prodDF("nome").startsWith("A")).show()
  • 26. Exercícios DataFrame 26 1. Enviar o diretório local “/input/exercises-data/juros_selic” para o HDFS em “/user/aluno/<nome>/data” 2. Criar o DataFrame jurosDF para ler o arquivo no HDFS “/user/aluno/<nome>/data/juros_selic/juros_selic.json” 3. Visualizar o Schema do jurosDF 4. Mostrar os 5 primeiros registros do jutosDF 5. Contar a quantidade de registros do jurosDF 6. Criar o DataFrame jurosDF10 para filtrar apenas os registros com o campo “valor” maior que 10 7. Salvar o DataFrame jurosDF10 como tabela Hive “<nome>.tab_juros_selic” 8. Criar o DataFrame jurosHiveDF para ler a tabela “<nome>.tab_juros_selic” 9. Visualizar o Schema do jurosHiveDF 10. Mostrar os 5 primeiros registros do jurosHiveDF 11. Salvar o DataFrame jurosHiveDF no HDFS no diretório “/user/aluno/nome/data/save_juros” no formato parquet 12. Visualizar o save_juros no HDFS 13. Criar o DataFrame jurosHDFS para mostrar o “save_juros” da questão 8 14. Visualizar o Schema do jurosHDFS 15. Mostrar os 5 primeiros registros do jurosHDFS
  • 27. Obrigado! Alguma pergunta? Você pode me encontrar em: rodrigo.augusto@semantix.com.br