Conhecendo o ecossistema Spark
Tags: datascience, beginners
Published: 2020-10-06 00:45:36


Spark é uma ferramenta para processamento distribuído e o maior projeto open source voltado para o processamento de dados do momento. Ele faz parte do ecossitema Hadoop, ou seja, pode ser utilizado rodando em cima da estrutura Hadoop e também pode utilizar a estrutura do HDFS e do MapReduce para otimizar consultas em grandes quantidades de dados. 

Além disso seu uso é muito interessante pois ele permite também realizar a aplicação de algoritmos de Machine Learning em cima de jobs MapReduce, realizar processamento de grafos e stream de dados. Vale ressaltar que o Spark também pode ser usado no modo stand alone e processar dados das mais variadas fontes, como banco de dados como Cassandra e o HBase.

## Ecossistema Spark

É composto pelo módulo responsável pela realização de Streaming, Spark SQL e Dataframes, MLlib e o GraphX. É possível utilizar com Java, Scala, Python e R.

![spark modules](https://dev-to-uploads.s3.amazonaws.com/i/rhywtfys7ecu021od5a2.png)

## Spark SQL e Dataframes

Como comentei logo acima, é possível estabelecer conexão com dados diretamenta de uma base de dados e processalos a partir daí, para isso o Spark conta com um módulo estruturado para tornar esse processamento muito mais eficiente. É possível realizar consultas SQL utilizando a estrutura do Hive e acelerando bastante o tempo de processamento em grandes quantidades de dados, uma integração muito poderosa e que torna o Spark tão especial para o processamento de big data.

Além disso o Spark possui seu próprio módulo para manipulação de Dataframes, que nada mais são do que estruturas que se assemelham a planilhas e permitem a manipulação de dados durante análise e exploração dos mesmos. Para aqueles mais acostumados com o módulo de dataframe do Pandas, pode estranhar algumas diferenças em como cada um desses frameworks possibilitam a manipulação, mas nada que não seja maleável.

## Spark Streaming

Algumas soluções necessitam possuir a habilidade de processar e analisar dados em tempo real, se diferenciando da estrutura para consumo em batch de uma base de dados. Para isso, o Spark possui um módulo inteiro voltado para ingestão de dados em stream, permitindo integrações com ferramentas como o Kafka e Flume. Dessa forma você pode utilizar o poder de processamento e aplicação de algoritmos de Machine Learning, a ingestão de dados em tempo real e aproveitar que o Spark possui uma boa tolerância a falhas .

## MLlib

É a biblioteca de Machine Learning do ecossistema Spark. Ele possui em sua biblioeteca a aplicação dos algoritmos de classificação, regressão, clusterização, filtro colaborativo, redução de dimensionalidade.

É também um cluster para computação de baixa latência, e permite o processamento de um grande volume de dados, sendo 100x mais rápido que o MapReduce, pois o Spark utiliza os dados em memória enquanto o MapReduce utiliza em disco. Além de ter essa otimização, não devemos esquecer que o Spark roda seus algoritmos em cima do MapReduce, portanto ele consegue aproveitar de ambas as partes.

Já existem vários algoritmos implementados, tantos de machine learning como também de estatística mais simples. Extração de caracteríristicas, transformação de dados como por exemplo de coluna para vetores para uso em algoritmos. Funções de otimização, como métodos do gradiente.

## GraphX

É o módulo reservado para criação, manipulação e tratamento de grafos e computação paralela voltada para grafos. O Spark já contém muito dos algoritmos mais comuns que utilizam grafos, como Page Rank, Connected component, Strongly connected components e outros mais.

# PySpark

O Spark é escrito majoritariamente em Scala, mas permite integração utilizando outras linguagens de programação como o Python. O PySpark é uma API para dar suporte a utilização do Spark utilizando python. 

É possível desfrutar dos módulos MLib, PySparkSQL e Graphframes. Onde é possível usurfruir dos benefícios de perfomance e tolerância a falhas do Spark no processamento e manipulação de dados SQL, de arquivos, em grafos e mais. O PySpark junta os benefícios do Spark às vantagens já existente na linguagem python para processamento de dados.

# Conclusão

Nesse artigo eu trouxe um pouco sobre o que é o Spark, quais os módulos presentes nele e quais as possibilidades de uso. Mais a frente compartilharei alguns exemplos de uso de cada um desses módulos apresentados nesse texto.


*Post originalmente postado no [meu blog](https://mayaramachado.dev/conhecendo-ecossistema-spark.html).*