Programação em Python e PySpark
Codificando aplicações Spark usando Python
Não podemos negar que o Python é a linguagem de programação mais usada na construção de pipelines de dados. Aqui na Stone, na BU de Produtos Financeiros, adotamos Python para criarmos toda a nossa infraestrutura de dados. Claro, que outras linguagens são bem vindas!
Por que usar Python? É uma linguagem clean, fácil de programar e com uma comunidade gigante, e tudo isso facilita a sua adoção. E como consequência fica muito mais fácil utilizar ferramentas codificadas em Python.
Neste post, contamos um pouquinho sobre como usamos Python e Pyspark para codificar aplicações Spark aqui na Stone.
1. O que é Spark?
Spark é um framework utilizado para processar grandes quantidades de dados, sendo nos dias atuais, o queridinho dos Engenheiros de Dados para desenvolver data pipelines robustas para Big Data.
Inicialmente foi desenvolvido pela Universidade da Califórnia, mas foi doado a Fundação Apache que hoje é responsável pela manutenção da ferramenta. Possui código livre e acessível via github do Projeto.
Podemos considerar o Spark como uma plataforma de computação em cluster com paralelismo, ou seja, os dados são distribuídos entre os clusters para processá-los de maneira paralela.
O Spark é escrito em Scala e executado em uma JVM (Java Virtual Machine). Atualmente podemos escrever aplicações Spark em R, Python, Java e Scala. Então se o Spark é escrito em Scala como podemos acessar as funcionalidades desse framework usando Python? É muito simples: usando o PySpark.
2. O que é PySpark?
Segundo a própria documentação do projeto, Pyspark é uma interface, escrita em Python, para o Apache Spark.
Permite escrever aplicações Spark utilizando APIs Python que interagem com o core do Spark. Em resumo: é uma forma fácil de se comunicar com o Spark utilizando Python!
As famosas RDDs
Poderíamos dizer que as RDDs (Resilient Distributed Datasets) são o core do Spark. Elas são estruturas de dados responsáveis basicamente pela transformação e distribuição dos dados através de múltiplos nodes. Usando Pyspark podemos facilmente trabalhar com essas estruturas. Vejamos o exemplo abaixo:
from pyspark.sql import SparkSessionspark = SparkSession
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()data = [1, 2, 3, 4, 5]
distData = spark.sparkContext.parallelize(data)
Primeiramente criamos uma nova SparkSession, e criamos uma RDD a partir de uma coleção de elementos inteiros, invocando para isso, a função parallelize( ). Esses elementos formam um dataset de dados distribuídos, o que facilita o seu processamento, pois poderá ser processado de forma paralela.
3. Vantagens e desvantagens do PySpark
Quando falamos em alguma ferramenta sempre é bom lembrar quais são as vantagens e desvantagens em utilizá-la, e com Pyspark não seria diferente. Vamos lá!
Vantagens:
- Fácil de utilizar.
- A curva de aprendizado é muito baixa.
- Possui grande quantidade de libs.
- Mais performático que o Pandas se usado com grandes quantidades de dados.
Desvantagens:
- Não pode utilizar funções internas do Spark.
- Mais lento do que Scala.
4. Onde usamos Pyspark?
Falar em pipeline e dados e não citar Spark seria bem difícil. Aqui, na Stone, também usamos Spark, e criamos uma arquitetura de dados usando Spark e Kubernetes.
Para enviar jobs para o nosso cluster Kubernetes preferimos escrever scripts Python utilizando PySpark por sua facilidade de comunicação com o Spark, e claro, por ser escrito em Python.
Em resumo: respiramos Python e Pyspark por aqui!
E o que acha de viver isso com a gente? Vem conferir nossa vaga aberta:
Machine Learning Engineer