PySpark no Azure Databricks
O Azure Databricks foi desenvolvido com base no Apache Spark, um mecanismo de análise unificado para big data e aprendizado de máquina. O PySpark ajuda você a fazer interface com o Apache Spark usando a linguagem de programação Python, que é uma linguagem flexível, fácil de aprender, implementar e manter. Ele também fornece muitas opções para visualização de dados no Databricks. O PySpark combina o poder do Python e do Apache Spark.
Este artigo fornece uma visão geral dos conceitos básicos do PySpark no Databricks.
Introdução aos conceitos do Spark
É importante entender os principais conceitos do Apache Spark antes de se aprofundar no uso do PySpark.
DataFrames
DataFrames são os principais objetos no Apache Spark. Um DataFrame é um conjunto de dados organizado em colunas nomeadas. Você pode pensar em um DataFrame como uma planilha ou uma tabela SQL, uma estrutura de dados rotulada bidimensional de uma série de registros (semelhante a linhas em uma tabela) e colunas de diferentes tipos. Os DataFrames fornecem um conjunto avançado de funções (por exemplo, selecionar colunas, filtrar, unir e agregar) que permitem executar tarefas comuns de manipulação e análise de dados com eficiência.
Alguns elementos importantes do DataFrame incluem:
- Esquema: um esquema define os nomes de coluna e os tipos de um DataFrame. Os formatos de dados têm semântica diferente para definição e imposição de esquema. Algumas fontes de dados fornecem informações de esquema, enquanto outras dependem da definição de esquema manual ou permitem inferência de esquema. Os usuários podem definir esquemas manualmente ou os esquemas podem ser lidos de uma fonte de dados.
- Linhas: o Spark representa registros em um DataFrame como objetos
Row
. Embora os formatos de dados subjacentes, como o Delta Lake, usem colunas para armazenar dados, para otimização, o Spark armazena dados em cache e embaralha dados usando linhas. - Colunas: as colunas no Spark são semelhantes a colunas em uma planilha e podem representar um tipo simples, como uma cadeia de caracteres ou um inteiro, mas também tipos complexos como matriz, mapa ou nulo. Você pode escrever consultas que selecionam, manipulam ou removem colunas de uma fonte de dados. As possíveis fontes de dados incluem tabelas, exibições, arquivos ou outros DataFrames. As colunas nunca são removidas de um conjunto de dados ou de um DataFrame, elas são apenas omitidas dos resultados por meio de transformações
.drop
ou omissão em instruçõesselect
.
Processamento de dados
O Apache Spark usa uma avaliação lenta para processar transformações e ações definidas com DataFrames. Esses conceitos são fundamentais para entender o processamento de dados com o Spark.
Transformações: no Spark, você expressa a lógica de processamento como transformações, que são instruções para carregar e manipular dados usando DataFrames. As transformações comuns incluem leitura de dados, junções, agregações e conversão de tipos. Para obter informações sobre transformações no Azure Databricks, confira Transformar dados.
Avaliação eficiente: o Spark otimiza o processamento de dados identificando o plano físico mais eficiente para avaliar a lógica especificada pelas transformações. No entanto, o Spark não atua em transformações até que as ações sejam chamadas. Em vez de avaliar cada transformação na ordem exata especificada, o Spark aguarda até que uma ação dispare a computação em todas as transformações. Isso é conhecido como avaliação preguiçosa ou carregamento preguiçoso, o que permite encadear várias operações porque o Spark lida com a execução de maneira adiada, em vez de executá-las imediatamente quando elas são definidas.
Observação
A avaliação lenta significa que o DataFrames armazena consultas lógicas como um conjunto de instruções em relação a uma fonte de dados em vez de um resultado na memória. Isso varia drasticamente da execução ansiosa, que é o modelo usado por DataFrames do Pandas.
Ações: as ações instruem o Spark a calcular um resultado de uma série de transformações em um ou mais DataFrames. As operações de ação retornam um valor e podem ser qualquer uma das seguintes:
- Ações para gerar dados no console ou no editor, como
display
oushow
- Ações para coletar dados (retorna objetos
Row
), comotake(n)
efirst
ouhead
- Ações para gravar em fontes de dados, como
saveAsTable
- Agregações que disparam uma computação, como
count
Importante
Em pipelines de dados de produção, gravar dados é normalmente a única ação que deve estar presente. Todas as outras ações interrompem a otimização de consulta e podem levar a gargalos.
O que significa os DataFrames serem imutáveis?
DataFrames são uma coleção de transformações e ações definidas em relação a uma ou mais fontes de dados, mas, em última análise, o Apache Spark resolve consultas de volta para as fontes de dados originais, de modo que os dados em si não sejam alterados e nenhum DataFrames seja alterado. Em outras palavras, DataFrames são imutáveis. Por isso, após a execução de transformações, um novo DataFrame é retornado que precisa ser salvo em uma variável para poder ser acessado em operações subsequentes. Se você quiser avaliar uma etapa intermediária da transformação, chame uma ação.
APIs e bibliotecas
Assim como acontece com todas as APIs do Spark, o PySpark vem equipado com muitas APIs e bibliotecas que permitem e dão suporte a funcionalidades avançadas, incluindo:
- Processamento de dados estruturados com consultas relacionais com o DataFrames e SQL do Spark. O SQL do Spark permite que você misture consultas SQL com programas Spark. Com DataFrames do Spark, você pode ler, gravar, transformar e analisar dados com eficiência usando Python e SQL, o que significa que você está sempre aproveitando todo o poder do Spark. Consulte Introdução ao PySpark.
- Processamento escalonável de fluxos com Streaming estruturado. Você pode expressar sua computação de streaming da mesma maneira que expressaria uma computação em lote em dados estáticos e o mecanismo SQL do Spark o executa de maneira incremental e contínua à medida que os dados de streaming continuam a chegar. Confira Visão geral de Streaming Estruturado.
- Estruturas de dados do Pandas e ferramentas de análise de dados que funcionam no Apache Spark com a API do Pandas no Spark. A API do Pandas no Spark permite dimensionar sua carga de trabalho do Pandas para qualquer tamanho executando-a distribuída em vários nós, com apenas uma base de código que funciona com o Pandas (testes, conjuntos de dados menores) e com o Spark (produção, conjuntos de dados distribuídos). Confira Visão geral da API do Pandas no Spark.
- Algoritmos de aprendizado de máquina com o MLLib (aprendizado de máquina). O MLlib é uma biblioteca de aprendizado de máquina escalonável criada no Spark que fornece um conjunto uniforme de APIs que ajudam os usuários a criar e ajustar pipelines práticos de aprendizado de máquina. Confira Visão geral da biblioteca de aprendizado de máquina.
- Grafos e computação paralela de grafo com GraphX. O GraphX apresenta uma nova multigrafia direcionada com propriedades anexadas a cada vértice e borda e expõe operadores de computação de grafo, algoritmos e construtores para simplificar as tarefas de análise de grafo. Confira a Visão geral do GraphX.
Tutoriais do Spark
Para obter exemplos de uso do PySpark no Databricks, confira os seguintes artigos:
A documentação do Apache Spark também tem guias e inícios rápidos para aprender Spark, incluindo o seguinte:
- Início rápido do DataFrames do PySpark
- Introdução ao SQL do Spark
- Guia de Programação de Streaming Estruturado
- Início Rápido da API do Pandas no Spark
- Guia de programação da biblioteca de aprendizado de máquina
Referência do PySpark
O Azure Databricks mantém uma versão própria das APIs do PySpark e a referência correspondente, que podem ser encontradas nestas seções: