Spark SQL, otimizador de catalisador | Analise dados com Spark SQL

Conteúdo

Visão geral

  • Bancos de dados relacionais são onipresentes, mas o que acontece quando você precisa dimensionar sua infraestrutura?
  • Discutiremos a função do Spark SQL nesta situação e entenderemos por que ele é uma ferramenta tão útil para o aprendizado.
  • Este tutorial também mostra como o Spark SQL funciona usando um estudo de caso Python

Introdução

Quase todas as organizações usam bancos de dados relacionais para várias tarefas, desde o gerenciamento e rastreamento de uma grande quantidade de informações até a organização e processamento de transações. É um dos primeiros conceitos ensinados a nós na escola de programação.

E sejamos gratos por isso, porque esse é um equipamento crucial no conjunto de habilidades de um cientista de dados!! Você simplesmente não pode sobreviver sem saber como os bancos de dados funcionam. É um aspecto fundamental de qualquer aprendizado de máquina esboço, projeto.

Linguagem de consulta estruturada (SQL) é facilmente a linguagem mais popular quando se trata de bancos de dados. Ao contrário de outras linguagens de programação, é fácil de aprender e nos ajuda a iniciar nosso processo de extração de dados. Para a maioria dos empregos de ciência de dados, A proficiência em SQL é mais alta do que a maioria das outras linguagens de programação.

spark-sql-9316923

Mas há um grande desafio com SQL: terá dificuldade em fazê-lo funcionar ao lidar com grandes conjuntos de dados. É aqui que o Spark SQL ocupa um lugar de destaque e fecha a lacuna.. Falarei mais sobre isso na próxima seção..

Este tutorial prático irá apresentá-lo ao mundo do Spark SQL, como funciona, quais são os diferentes recursos que ele oferece e como você pode implementá-lo usando python. Também falaremos sobre um conceito importante que você encontrará com frequência em entrevistas.: o otimizador de catalisador.

Comecemos!

Observação: Se você é completamente novo no mundo SQL, Eu recomendo fortemente o seguinte curso:

Tabela de conteúdo

  1. Desafios com escalonamento de banco de dados relacional
  2. Visão geral do Spark SQL
  3. Recursos do Spark SQL
  4. Como o Spark SQL executa uma consulta?
  5. O que é um Catalyst Optimizer?
  6. Executar comandos SQL com Spark
  7. Usando Apache Spark em escala

Desafios com escalonamento de banco de dados relacional

A questão é por que devo aprender Spark SQL? Eu mencionei isso brevemente antes, mas vamos olhar com um pouco mais de detalhes agora.

Bancos de dados relacionais para um grande projeto (aprendizado de máquina) contém centenas ou talvez milhares de tabelas e a maioria dos recursos em uma tabela mapeia para outros recursos em outras tabelas. Esses bancos de dados são projetados para rodar apenas em uma única máquina, a fim de manter as regras de mapeamento de tabelas e evitar os problemas de computação distribuída..

Isso geralmente se torna um problema para as organizações quando desejam escalar com esse design.. Isso exigiria hardware mais complexo e caro, com significativamente mais capacidade de processamento e armazenamento. Como você pode imaginar, Atualizar de um hardware mais simples para um hardware mais complexo pode ser um grande desafio.

Uma organização pode precisar deixar seu site off-line por algum tempo para fazer as mudanças necessárias. Durante este período, perderia negócios com novos clientes que eles poderiam ter adquirido.

O que mais, conforme o volume de dados aumenta, as organizações lutam para lidar com essa enorme quantidade de dados usando bancos de dados relacionais tradicionais. É aqui que o Spark SQL entra em cena..

Visão geral do Spark SQL

Sem análise de big data, empresas são cegas e surdas e vagam pela teia como cervos em uma rodovia.

~ Geoffrey Moore

As estruturas Hadoop e MapReduce já existem há muito tempo na análise de big data. Mas esses quadros exigem muitas operações de leitura e gravação em um disco rígido, o que os torna muito caros em termos de tempo e velocidade.

Apache Spark é a estrutura de processamento de dados mais eficiente nas empresas hoje. É verdade que o custo do Spark é alto, pois requer muita RAM para cálculos na memória, mas ainda é um favorito entre os cientistas de dados e engenheiros de big data.

No ecossistema Spark, nós temos os seguintes componentes:

  1. MLlib: Esta é a biblioteca de aprendizado de máquina escalonável do Spark que fornece algoritmos de alta qualidade para regressão, agrupamento, classificação, etc. Você pode começar a criar pipelines de aprendizado de máquina usando MLlib do Spark usando este artigo: Como criar pipelines de aprendizado de máquina usando PySpark?
  2. Spark Streaming: Estamos gerando dados em uma escala e taxa sem precedentes agora. Como podemos garantir que nosso pipeline de aprendizado de máquina continue produzindo resultados assim que os dados são gerados e coletados? Aprenda a usar um modelo de aprendizado de máquina para fazer previsões sobre a transmissão de dados com o PySpark?
  3. GraphX: É uma API Spark para gráficos, um motor gráfico de rede que suporta computação gráfica paralela.
  4. Spark SQL: Esta é uma estrutura distribuída para processamento de dados estruturados fornecida pelo Spark

Sabemos que os bancos de dados relacionais também armazenam as relações entre as diferentes variáveis, bem como as diferentes tabelas, e são projetados de forma que possam lidar com consultas complexas..

Spark SQL é uma combinação incrível de processamento relacional e programação funcional do Spark.. Fornece suporte para várias fontes de dados e torna possíveis as consultas SQL, resultando em uma ferramenta muito poderosa para analisar dados estruturados em escala.

screenshot-from-2020-01-14-10-48-25-6880080

Recursos do Spark SQL

Spark SQL tem muitos recursos incríveis, mas eu queria destacar algumas teclas que você usará muito em sua função:

  1. Consultar dados de estrutura em programas Spark: A maioria de vocês já deve estar familiarizado com SQL. Portanto, você não precisa aprender a definir uma função complexa em Python ou Scala para usar o Spark. Você pode usar exatamente a mesma consulta para obter os resultados de seus maiores conjuntos de dados!!
  2. Compatível com Hive: Sem SQL solo, mas você também pode executar as mesmas consultas do Hive com o Spark SQL Engine. Permite compatibilidade total com as consultas atuais do Hive.
  3. Uma maneira de acessar os dados: Em projetos típicos de nível empresarial, não tem uma fonte de dados comum. Em seu lugar, deve lidar com vários tipos de arquivos e bancos de dados. Spark SQL oferece suporte a quase todos os tipos de arquivo e oferece uma maneira comum de acessar uma variedade de fontes de dados, como colmeia, Euro, Parquet, JSON e JDBC
  4. Desempenho e escalabilidade: Ao trabalhar com grandes conjuntos de dados, há chances de ocorrerem erros entre o momento em que a consulta é executada. Spark SQL oferece suporte total a tolerância a falhas no meio da consulta, para que possamos trabalhar até mesmo com mil nós simultaneamente
  5. Funções definidas pelo usuário: UDF é um recurso do Spark SQL que define novas funções baseadas em colunas que estendem o vocabulário do Spark SQL para transformar conjuntos de dados

Como o Spark SQL executa uma consulta?

Como funciona o Spark SQL, essencialmente? Vamos entender o processo nesta seção.

  • Análise: Primeiro, quando você consulta algo, Spark SQL encontra a relação a ser calculada. É calculado usando uma árvore de sintaxe abstrata (AST) onde você verifica o uso correto dos elementos usados ​​para definir a consulta e, em seguida, cria um plano lógico para executar a consulta.

spark_sql_parser_parser_rule_context-3190536

Fonte

  • Otimização lógica: Nesta próxima etapa, a otimização baseada em regras é aplicada ao plano lógico. Use técnicas como:
    • Filtre os dados com antecedência se a consulta contiver um Onde cláusula
    • Use o índice disponível nas tabelas, pois pode melhorar o desempenho, e
    • Mesmo garantindo que as diferentes fontes de dados sejam reunidas na ordem mais eficiente.
  • Planejamento físico: Nesta etapa, um ou mais planos físicos são formados usando o plano lógico. Spark SQL então seleciona o plano que será capaz de executar a consulta da maneira mais eficiente, quer dizer, usando menos recursos computacionais.
  • Código de GERAÇÃO: Na etapa final, Spark SQL gera código. Envolve a geração de um bytecode Java para rodar em cada máquina. O Catalyst usa um recurso especial da linguagem Scala chamado “Quasiquotes” para facilitar a geração de código.

sql-plan-3029088

O que é um Catalyst Optimizer?

Otimização significa atualizar o sistema ou fluxo de trabalho existente de forma que funcione de forma mais eficiente, enquanto usa menos recursos. Um otimizador conhecido como Catalyst Optimizer é implementado em Spark SQL que suporta técnicas de otimização baseadas em regras e baseadas em custos.

Na otimização baseada em regras, definimos um conjunto de regras que determinarão como a consulta será executada. Ele irá reescrever a consulta existente de uma maneira melhor para melhorar o desempenho.

Por exemplo, digamos que haja um índice disponível na mesa. Mais tarde, o índice será usado para a execução da consulta de acordo com as regras e filtros ONDE serão aplicados primeiro nos dados iniciais, se possível (em vez de aplicá-los por último).

O que mais, existem alguns casos em que o uso de um índice desacelera uma consulta. Sabemos que nem sempre é possível que um conjunto de regras definidas sempre tome boas decisões, verdade?

Aqui está o problema: a otimização baseada em regras não leva em consideração a distribuição de dados. É aqui que nos voltamos para um Otimizador baseado em custos. Use estatísticas sobre a mesa, seus índices e distribuição de dados para tomar melhores decisões.

Executar comandos SQL com Spark

Hora de codificar!

Eu criei um conjunto de dados aleatórios de 25 milhões de linhas. Você pode baixar o conjunto de dados completo aqui. Temos um arquivo de texto com valores separados por vírgulas. Então, primeiro, vamos importar as bibliotecas necessárias, vamos ler o conjunto de dados e ver como o Spark irá particionar os dados em partições:

duas linhas-7326469

Aqui,

  • O primeiro valor em cada linha é a idade da pessoa (que deve ser um número inteiro)
  • O segundo valor é o grupo sanguíneo da pessoa (que deve ser uma string)
  • O terceiro e o quarto valores são cidade e gênero (ambos são correntes), e
  • O valor final é um id (que é do tipo inteiro)

Iremos mapear os dados em cada linha para um tipo de dados e nome específicos usando linhas do Spark:

tow-rows-2-1327720

cinco linhas-7309776

A seguir, vamos criar um quadro de dados usando as linhas analisadas. Nosso objetivo é encontrar as contagens de valores da variável de gênero usando um simples agrupar por função no quadro de dados:

dataframe-head-9695740

value_count_gender-2092469

tempo-1-1279402

Demorou 26 ms para calcular a contagem de valores de 25 milhões de linhas usando uma função groupby no quadro de dados. Você pode calcular o tempo usando %%clima na cela privada de seu caderno Jupyter.

Agora, vamos realizar a mesma consulta usando Spark SQL e ver se melhora o desempenho ou não.

Primeiro, você precisa registrar o quadro de dados como uma tabela temporária usando a função registerTempTable. Isso cria uma tabela na memória que tem como escopo apenas o cluster no qual foi criada. A vida útil desta mesa temporária é limitada a apenas uma sessão. É armazenado usando Formato de coluna Hive In-Memory que é altamente otimizado para dados relacionais.

O que mais, Você nem mesmo precisa escrever funções complexas para obter resultados se estiver familiarizado com o SQL!! Aqui, você só precisa passar a mesma consulta SQL para obter os resultados desejados em dados maiores:

value_count_gender-2092469

tempo-2-5859703

Só demorou cerca 18 ms calcula as contagens de valores. Isso é muito mais rápido do que até mesmo um quadro de dados Spark.

A seguir, vamos realizar outra consulta SQL para calcular a idade média em uma cidade:

idade média 8119183

Caso de uso do Apache Spark em escala

Sabemos que o Facebook tem mais do que 2000 milhões de usuários ativos mensais e com mais dados, enfrentam desafios igualmente complexos. Para uma única consulta, precisa analisar dezenas de terabytes de dados em uma única consulta. O Facebook acredita que o Spark amadureceu a ponto de podermos compará-lo ao Hive em vários casos de uso de processamento em lote..

Deixe-me ilustrar isso usando um estudo de caso do próprio Facebook.. Uma das suas tarefas foi preparar as características para o ranking das entidades que o Facebook utiliza nos seus diversos serviços online. Anteriormente, usou a infraestrutura baseada em Hive, que exigia muitos recursos e era difícil de manter, como o pipeline foi dividido em centenas de trabalhos Hive. Em seguida, eles construíram um pipeline mais rápido e gerenciável com Spark. Você pode ler o tour completo aqui.

Eles compararam os resultados do Spark vs Hive Pipeline. Aqui está um gráfico de comparação em termos de latência (tempo decorrido de uma ponta a outra do trabalho) o que mostra claramente que o Spark é muito mais rápido do que o Hive.

latência-4546514

Notas finais

Abordamos a ideia central por trás do Spark SQL neste artigo e também aprendemos como usá-lo a nosso favor.. Também pegamos um grande conjunto de dados e aplicamos nosso aprendizado em Python.

Spark SQL é relativamente desconhecido para muitos aspirantes à ciência de dados, mas será útil em sua função na indústria ou mesmo em entrevistas. É um acréscimo bastante importante aos olhos do gerente de contratação..

Compartilhe suas idéias e sugestões na seção de comentários abaixo..

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.