Para o desenvolvimento desta aplicação foi utilizado Python, a escolha foi feita devido a alguns atributos
- Membros ja tinham conhecimento prévio relevante
- Facilidade para execução de operações matemáticas e estatísticas
- Suporte para Apache Spark
- pyspark
- numpy
- matplotlib
- pandas
- traceback
- scipy
Spark é um framework para processamento de dados em grande escala.
O Spark foi criado tentando resolver as limitações do MapReduce (by doing processing in-memory, reducing the number of steps in a job, and by reusing data across multiple parallel operations)
Em apenas um passo, os dados são lidos, as operações são feitas e os resultados reescritos.
Escrito em Java, interpretado por Python, Scala e R(parcialmente).
O driver roda um processo.
Em cima dos objetos de Row do RDD, há a abstração Dataframe. Permite a integração de consultas SQL padrão. Com otimização de custo, tornando as queries rápidas. O núcleo do Spark torna as queries tolerantes a falhas.
Na inicialização, declaramos cores como Workers, que serão usados por completo quando chamados.
Cada Worker também é um processo.
O Standalone Cluster Manager administrará como os Workers trabalharão e dividirá a carga de trabalho.
- DETALHE: O Pyspark não consegue rodar no modo Standalone, portanto é necessária a instalação de uma biblioteca extra, como o Hadoop, o YARN ou o Apache Mesos. No caso do Windows, o terminal falará sobre a necessidade da instalação de algo chamado "winutils.exe", que pode ser encontrado aqui: https://github.com/cdarlint/winutils. O Linux poderá reclamar da necessidade de hadoop-native.
- Alterar na
linha 15
do arquivomodulo_spark.py
colocando a pasta que contenha os dados a serem analisados como seque o exemplo- Os dados devem estar descompactados em pastas com o nome do ano, e dentro das pastas dos anos devem contem os csvs
- Iniciar o terminal do programa utilizando o comando padrão do python
A classe SparkDataFrame foi uma classe desenvolvida para encapsular todo o ferramental necessário para a analise dos dados em questão.
Nela temos algumas funções
É possivel visualizar exemplos das funções no arquivo examples.md
Utilizada para debug, faz queries SQL no data frame, porem de maneira muito lenta.
Utilizada para filtrar parte do data frame, equivalente a um where do SQL.
> filter
> Filtre: NAME = "SOKOL, RS"
Com isso passaremos a ter salvo no nosso SparkDataFrame o conjunto de dados resultado do filter
Comando utilizado para mostrar no terminal o conjunto de dados selecionado.
> show
Imprime no terminal o conjunto de dados previamente selecionado
Comando utilizado calcular a média de alguma coluna numérica do conjunto de dados selecionado.
> media
> Diga qual coluna: TEMP
Calcula a média da coluna do conjunto de dados selecionado.
Comando utilizado calcular o desvio padrão de alguma coluna numérica do conjunto de dados selecionado, alem de plotar o gráfico da distribuição do mesmo. Para usar este comando adequadamente é necessário calcular a média da coluna previamente
> media
> Diga qual coluna: TEMP
> desvio padrao
> Diga qual coluna: TEMP
Comando utilizado calcular os quadrados mínimos entre duas colunas de dados numéricas.
Para visualizar o resultado deste comando utilize o comando plot
> quadrados minimos
> Diga qual a coluna de X: TEMP
> Diga qual a coluna de Y: DEWP
Comando utilizado agrupar o conjunto de dados selecionado aplicando alguma determinada função. Opções:
- avg
- min
- max
- sum
- count
> agrupar
> Qual função?: avg
> Qual coluna de grupo?: DATE
> Qual a coluna da função?: TEMP
> Selecione o período de tempo (year,month,day ou nada): mounth
Comando utilizado exibir o grafico calculado pela função quadrados minimos
> agrupar
> Qual função?: avg
> Qual coluna de grupo?: DATE
> Qual a coluna da função?: TEMP
> Selecione o período de tempo (year,month,day ou nada): mounth
Comando utilizado exibir o grafico calculado pela função quadrados minimos
> plot
Comando utilizado limpar o conjunto de dados selecionado, sendo necessário fazer um novo filter para populá-lo novamente.
> clear
Comando utilizado exibir o schema do data frame selecionado, sendo isso o nome das colunas do Dataframe e o seu tipo de variável.
> schema