Iniciando um projeto Spark no Colab

Iniciando um projeto Spark no Colab
Igor Nascimento Alves
Igor Nascimento Alves

Compartilhe

Quando perguntamos para uma pessoa, que já deu seus primeiros passos no universo de data science e machine learning, quais as bibliotecas que ela utilizaria para carregar e processar os dados, provavelmente ela diria SKlearn e Pandas. Estas resolvem muito bem todas as tarefas que precisamos quando estamos lidando com uma quantidade de dados pequena.

E quando passamos para um cenário de dados mais volumosos (na casa dos milhões, bilhões ou até mais)? Será que o Pandas vai conseguir processar tudo isso? Uma vez que o Pandas faz uso da memória RAM da máquina para processar os dados, a resposta geralmente é: não vai conseguir. Então, o que a pessoa cientista de dados pode fazer neste momento?

Pensando em resolver este problema, surgiram soluções como o Hadoop e o Spark. O que elas fazem é tornar possível o processamento de grandes quantidades de dados através do processamento distribuído. O Hadoop, o mais antigo dos dois, foi criado em 2008 e é composto por três partes principais: a camada de processamento (MapReduce), a camada de armazenamento (Hadoop Distributed File System - HDFS) e a camada de gerenciamento de recursos (YARN). Isso permite o processamento de Big Data.

Muito legal! Mas, se o Hadoop já resolve todo o problema de processamento de dados, qual a motivação para utilizar o Spark? Isto está relacionado com o funcionamento do Hadoop. A cada operação que executa, ele precisa ler os dados e depois gravá-los de volta no armazenamento físico após o processamento. A leitura e gravação frequentes no disco geram um gargalo enorme em toda a operação que, mesmo rodando em paralelo, vai ficar limitada.

Spark resolve isso melhorando o modelo de programação MapReduce e reaproveitando todas as outras soluções (YARN e HDFS). Outra diferença importante em relação ao Hadoop é que o Spark trabalha com os dados em memória e não com leituras e gravações constantes em disco. Com isso, ele apresenta uma performance bastante superior ao Hadoop, podendo chegar a um desempenho até 100 vezes maior.

Convencidos de que o Spark é a melhor opção para trabalhar com seus dados? Então vamos aprender como utilizar o Spark no seu projeto no Colab.

Primeiro vamos precisar instalar uma JDK que vai permitir rodar código na linguagem Scala nas JVM (que é como o Spark foi construído):

!apt-get install openjdk-8-jdk-headless -qq > /dev/null

Depois, vamos baixar os arquivos do Spark na máquina virtual do Google. Nesse caso, optei pela versão 3.1.2 do Spark e a versão 2.7 do Hadoop.

!wget -q https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop2.7.tgz

O próximo passo vai ser descompactar o arquivo que fizemos download.

!tar xf spark-3.1.2-bin-hadoop2.7.tgz

Por fim podemos instalar o pacote findspark

!pip install -q findspark

Agora podemos passar para o ambiente Python e definir as variáveis. Basicamente explicaremos para o computador onde estão os programas que vamos utilizar. No nosso caso, esses programas são o Java e o Spark.

import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-3.1.2-bin-hadoop2.7"

Com as variáveis definidas, podemos utilizar o findspark que vai permitir a importação dos pacotes necessários para utilizar o PySpark.

import findspark
findspark.init()

Agora, podemos, por exemplo, importar o SparkSession do módulo pyspark.sql

from pyspark.sql import SparkSession

E, finalmente, criarmos a nossa sessão Spark, que nada mais é que a API que vamos utilizar para trabalhar com o Spark. Ela vai cuidar de toda a parte de gerenciamento dos nós do processamento em paralelo.

spark = SparkSession.builder \
    .master('local[*]') \
    .appName('Iniciando com Spark') \
    .config('spark.ui.port', '4050') \
    .getOrCreate()

Feito isso, você terá acesso a todas as operações do Spark. É importante deixar claro que cada uma das ferramentas tem suas vantagens e desvantagens e é necessário refletir quando utilizar cada uma delas.

O Pandas funciona muito bem para bases pequenas. Já o Hadoop pode ser a melhor escolha com bases grandes em que a perda de performance não seja muito grande. E o Spark pode ser sua escolha quando estiver trabalhando com muitos dados que precisem de alta performance ou até com dados em streaming.

Na Alura temos diversos conteúdos que vão apresentar várias possibilidades com o Spark como trabalhar com Streaming e até Machine Learning. E caso você queira se aprofundar ainda mais na prática do Spark temos o curso Spark: Apresentando a ferramenta.

Igor Nascimento Alves
Igor Nascimento Alves

Cientista da Computação; Ouvinte do Nerdcast e Gugacast; Curioso por ML e DS; Pythonista e Tecladista; Fã da NBA;

Veja outros artigos sobre Data Science