A análise de dados tem crescido a cada dia e várias ferramentas tem surgido para auxiliar aqueles que trabalham com dados. Uma destas ferramentas é o Apache Spark.
Spark é um projeto open source, mantido por uma comunidade de desenvolvedores que foi criado em 2009 na Universidade da Califórnia, Berkeley. Os desenvolvedores estavam trabalhando com Hadoop MapReduce e perceberam ineficiências na execução de computação interativa. Por esta razão, Spark foi concebido com o principal objetivo de ser veloz, tanto no processamento de queries quanto de algoritmos, além de processamento em memória e eficiente recuperação de falha.
Apache Spark é uma plataforma de computação em cluster criada para ser rápida e de propósito geral e tem crescido muito em popularidade. O Apache Spark oferece basicamente 3 principais benefícios:
1- Facilidade de uso – é possível desenvolver API’s de alto nível em Java, Scala, Python e R, que permitem focar apenas no conteúdo a ser computado, sem se preocupar com configurações de baixo nível e extremamente técnicas.
2- Velocidade – Spark é veloz, permitindo uso interativo e processamento rápido de algoritmos complexos. Velocidade é uma característica especialmente importante no processamento de grandes conjuntos de dados e pode fazer a diferença entre analisar os dados de forma interativa ou ficar aguardando vários minutos pelo fim de cada processamento. Com Spark, o processamento é feito em memória.
3- Uso geral – Spark permite a utilização de diferentes tipos de computação, como processamento de linguagem SQL (SQL Spark), processamento de texto, Machine Learning (MLlib) e processamento gráfico (GraphX). Estas características fazem do Spark uma excelente opção para projetos de Big Data.
O projeto Spark contém diversos componentes integrados. Basicamente, Spark é um engine de computação, responsável por agendar, distribuir e monitorar aplicações de diversas tarefas de processamento através de diferentes servidores em cluster.
Spark Framework
Spark Core
Contém as funcionalidades básicas do Spark, incluindo componentes para agendamento de tarefas, gestão de memória, recuperação de falha e sistemas de armazenamento. O Spark Core também possui as API’s que definem os Resilient Distributed Datasets (RDD’s), que são a programação principal do Spark. As RDD’s são distribuídas pelos nodes e podem ser manipuladas em paralelo.
Spark SQL
Spark SQL é um pacote para tarefas com dados estruturados. Ele permite realizar queries nos dados através de linguagem SQL e HQL (Apache Hive Query Language – a variação do SQL desenvolvida pela Apache), além de suportar diversas fontes de dados como Hive tables, Parquet e JSON. Spark SQL permite que desenvolvedores utilizem linguagem SQL em conjunto com scripts de manipulação de dados feitas em Python, R, Java e Scala (é nesta integração que são usados os RDD’s presentes no Spark Core). Esta integração entre SQL e linguagens de manipulação de dados, fazem do Spark SQL uma ferramenta de Data Warehouse sem igual no mercado.
Spark Streaming
Esse é um componente do framework Spark para processamento de streams de dados em tempo real. Exemplos de streams de dados em tempo real incluem arquivos de logs gerados em servidores web ou filas de mensagens contendo atualizações de web services. Spark Streaming provê uma API para manipulação de dados através das RDD’s, permitindo que se desenvolva projetos de manipulação de dados armazenados em memória, disco ou sendo coletado em tempo real.
MLlib
A biblioteca MLlib é uma funcionalidade para Machine Learning. A MLlib possui diversos tipos de algoritmos de Machine Learning, incluindo classificação, regressão, clustering e filtros colaborativos, assim como permite avaliação de modelos e importação de dados. Tudo isso foi criado para trabalhar muito bem através de cluster de servidores.
GraphX
O GraphX é um biblioteca para manipulação de gráficos e computação em paralelo. Ele também utiliza os RDD’s e possui operadores para manipulação gráfica (subgraph e mapVertices) e bibliotecas de algoritmos gráficos (PageRank e triangle counting).
Gerenciamento do Cluster
Spark foi desenhado para operar em cluster através de milhares de computadores. Para isso, o Spark possui gerenciadores de cluster, incluindo Hadoop YARN, Apache Mesos e o Standalone Scheduler.
E afinal, como Spark é usado em Data Science?
Spark é um framework de propósito geral para computação em cluster e pode ser usado em diversas aplicações. Mas atualmente tem sido bastante utilizado em projetos de Data Science.
Cientistas de Dados normalmente possuem conhecimento de linguagem SQL, estatística, modelagem preditiva, Machine Learning e programação em Python, R ou Matlab. Os Cientistas de Dados usam estes conhecimentos para analisar dados e extrair insights, respondendo questões relacionadas a áreas de negócio. Spark suporta diferentes tarefas de Data Science. Ele permite análise de dados interativa com Python ou Scala, processamento SQL, análise de algoritmos de Machine Learning com o MLlib, além de chamadas externas a scripts desenvolvidos em R ou Matlab. Spark permite que os Cientistas de Dados consigam tratar grandes volumes de dados, que provavelmente não seria possível usando R ou Python (pandas).
O resultado de um projeto de Data Science, pode ser a criação de um sistema de análise de dados em tempo real, que pode se tornar o componente de uma aplicação de negócio. Por exemplo: a investigação inicial de dados, pode levar a criação de um sistema de recomendação em tempo real (já navegou por sites de compras e percebeu como as recomendações vão mudando de acordo com os cliques nas telas?). Este componente precisa ser executado em um ambiente tolerante a falha, de alto desempenho, rodando em cluster e com processamento em tempo real. Ou seja, o Spark pode ser usado em todas as fases de um projeto de Data Science, desde sua concepção, até sua execução em ambiente de produção.
David Matos
2 thoughts on “Apache Spark e Data Science”