Qualidade de Dados na Prática com Spark e AWS Deequ

Qual é a qualidade dos dados dentro de um Data Lake? Quão completos e confiáveis? Quais são as métricas de qualidade para Big Data?

Cícero Moura
Data Hackers
7 min readSep 16, 2021

--

Com a grande demanda de dados atualmente, os ambientes de Big Data estão cada vez maiores e completos. Entretanto, mais do que o volume de dados que temos em um Data Lake, temos que levar em consideração algumas perguntas: qual é a qualidade desses dados? Mais do que isso, como funciona o processo de qualidade? Como medimos a qualidade desses dados? Manual, automático, possui um processo confiável?

A ideia principal aqui não é responder todos esses questionamentos, mas refletir sobre eles e assim utilizar uma das ferramentas que temos disponíveis para ambiente de Big Data, buscando melhorar o processo de validação e checagem da qualidade dos dados (Data Quality).

Para falarmos de forma prática de qualidade de dados, temos que ter claro que testes de qualidade em dados são diferentes de testes em Software.

Para testes em software, seja unitário, de integração ou sistemas, temos tecnologias e metodologias bem definidas. Porém quando falamos de testes de dados automatizados, temos alguns novos conceitos e também novas tecnologias, que ainda vem ganhando espaço nesse processo.

Diferente dos testes de software, em dados, nos testes, temos objetivos de validar:

  • Qualidade na ingestão dos dados, seja em batch ou streaming;
  • Geração do Profile dos dados, para verificar completude, acurácia, valores únicos e distintos;
  • Validação dos tipos dos dados, sejam estruturados, semi-estruturados ou desestruturados;
  • Validação de dados de usuário, como campos de e-mail, CPF, CEP, número de telefones, CNPJ e outros;
  • Validação de range de valores para campos específicos, como estados, idade, valor de salário e outros.
  • Geração de relatório sobre a qualidade de dados e todos os testes realizados.
  • E outros objetivos mais…

Buscando aplicar os conceitos de forma prática, neste artigo a ideia é construir um exemplo utilizando o AWS Deequ, que é uma ferramenta open-source para ser executada junto com o Apache Spark.

AWS Deequ

O Deequ é uma ferramenta para testes unitário em dados e possui suporte nativo para ser executado com Spark e o seu core é construído na linguagem Scala, porém possui uma versão para Python que pode ser utilizada junto com o PySpark, o PyDeequ.

O Deequ é uma ferramenta suportada pela AWS que possui uma comunidade que está em crescimento. A imagem abaixo mostra a sua arquitetura.

Arquitetura do PyDeequ, fonte: https://github.com/awslabs/python-deequ

Tendo em vista a arquitetura do Deequ, podemos destacar:

  • Data Quality Contraints: de forma geral são as regras a serem aplicadas sobre um conjunto de dados, podendo ser especificada para vários conjuntos de validadores (Constraint Suggestion) ou validadores específicos para vários conjuntos de dados (Constraint Verification).
  • Profilers: é a execução de vários validadores genéricos de forma automática em um conjunto de dados, gerando diversas métricas básicas, como tamanho do dataset, tipo de dados e outras.
  • Analyzers: são os validadores mais gerais, para checar completude, tamanho do dataset e coisas relacionadas.
  • Checks: são validadores mais específicos, checando conjunto de valores, valores negativos, positivos, valores únicos e outros relacionados.

Agora a parte prática.

1. Arquitetura proposta

Antes de começar a parte de programação, a ideia é sugerir um desenho de arquitetura de alto nível, deixando assim visual como o Deequ pode ser utilizado dentro de um Data Lake.

Neste caso estamos considerando um Data Lake que tenha entrada de dados por Batch e Streaming, além das camadas raw, staged e curated que já são um padrão nas arquiteturas.

O que temos de novo é a camada BadData, onde os dados que não passarem nos testes serão encaminhados para serem tratados de forma especial, para voltar a camada curated quando estiverem corrigidos.

Por último temos um repositório de métricas dos testes, que será discutido mais à frente no artigo, a ideia é mostrar as métricas de qualidade dos dados de forma visual em dashboards.

Arquitetura de exemplo para utilizar o AWS Deequ em um Data Lake

Tendo em mente a arquitetura proposta, agora vamos para os dados.

2. Fonte de dados

A fonte de dados utilizada neste artigo é relacionada a Notificações de Síndrome Gripal, onde podemos encontrar os datasets do Brasil todo no site de dados abertos do Governo Federal.

O nosso objetivo será verificar a qualidade dos dados relacionados ao dataset do estado de Goiás.

3. Instalação do Deequ

Antes de começar a análise, é necessário instalar o Deequ. Como vamos utilizar um ambiente com Spark, o Deequ precisa ser instalado em todas as máquinas do cluster Spark. Uma facilidade é que se utilizarmos o Amazon EMR, o Deequ já vem de forma nativa instalado.

Para instalar o PyDeequ basta executar o comando abaixo:

pip install pydeequ

4. Configuração

Com o PyDeequ instalado, é necessário realizar algumas configurações iniciais.

Primeiramente importar as bibliotecas e depois inicializar a sessão do Spark com as referências para o PyDeequ.

Logo após as configurações inciais, podemos carregar os dados que serão utilizados como exemplo.

Neste casos serão dois datasets dos dados abertos: dados-go-1.csv e dados-go-2.csv.

Após carregar os dados, como os dois datasets possuem o mesmo schema, eles serão unificados em apenas um (union).

Como os datasets estão bem “sujos” e desorganizados, para que possamos rodar alguns testes básicos com o Deequ, foi necessário algumas limpezas, como padronização do tipo dos dados e transformações dos campos vazios para valores nulos, conforme o código abaixo:

Após a união dos datasets e a limpeza realizada, o schema dos dados com todas as colunas e seus respectivos tipos ficaram da seguinte forma:

Com o entendimento de todas as colunas que temos disponíveis no dataset, agora o próximo passo é realizar os testes nos dados com o Deequ.

5. Realização de testes

Primeiramente vamos adicionar alguns analyzers em colunas que podem ser as principais para utilização do dataset e depois alguns checks em outro conjunto de colunas.

5.1. Analyzers

Os analyzers que iremos utilizar a princípio são:

  • Completeness: verifica o quão completo está uma coluna, ou seja, a quantidade de valores não nulos.
  • Mean: realiza uma média dos valores de uma coluna, é um analyzer estatístico para os datasets.
  • Size: verifica o tamanho total de linhas considerando o dataset como um todo.

Os analyzers são adicionados conforme o código abaixo:

Após executar o código acima temos a seguinte tabela como resultado:

Percebemos que para cada analyzer adicionado ao código é gerado um campo de value medindo o percentual de sucesso para cada teste.

5.2 Checks

Para prosseguir com os testes, vamos adicionar alguns checks customizados.

Neste exemplo os seguinte checks são utilizados:

  • isUnique: verifica se uma determinada coluna possui apenas valores únicos.
  • hasMin: verifica se todos os valores de uma coluna são menos que um valor estabelecido para os testes.
  • hasMax: verifica se todos os valores de uma coluna são maiores que um valor estabelecido para os testes.
  • isContainedIn: verifica se todos os valores de uma coluna estão dentro de um conjunto de valores estabelecidos para os testes.

Após executar o código acima temos a seguinte tabela como resultado:

Neste caso, os checks não nos informa um percentual de sucesso e sim se o teste passou ou não, conforme as configurações estabelecidas.

6. Repositório de testes

O Deequ ainda oferece uma funcionalidade para manter um repositório de métricas sobre os testes realizados, onde é possível salvar os metadados dos testes, carregar os mesmos para exibição e depois anexar novos testes nos mesmos arquivos.
O melhor de manter um repositório de métricas dos testes é poder exibi-los em uma ferramenta visual.

É possível salvar as métricas nos sistemas de arquivos Amazon S3, HDFS, local ou em memória, o exemplo abaixo mostra como salvar no S3:

Após executar o código, as checagem serão salvas em uma arquivo chamado metrics.json no caminho do S3 informado. Um exemplo do arquivo salvo pode ser visto logo abaixo:

Conclusão

O cenário de qualidade de dados tende a crescer e ganhar maturidade, pois é necessário que não somente os dados estejam disponíveis, mas também estejam com qualidade. E além disso, que a qualidade possa ser medida com dados.

O AWS Deequ se apresenta como uma ótima solução para qualidade de dados no mundo de Big Data, pois como discutimos no artigo, ele possui diversas funcionalidades, além de ser fácil e intuitivo para ser utilizado. Um ponto a se considerar é que possui a AWS por trás da ferramenta como mantenedora.

Porém como todas as ferramentas possui seus pontos fracos, onde o seu Profile ainda não entrega métricas realmente úteis e caso queira customizar algum Check ou Analyzer será necessário programar em Scala, que é a linguagem da sua API oficial.

Caso queira comparar o AWS Deequ com outras ferramentas, vale a pena olhar o Apache Griffin e o Great Expectations também.

Para encerramos, o código completo do artigo pode ser encontrado no meu Github.

Referências

  1. https://aws.amazon.com/pt/blogs/big-data/test-data-quality-at-scale-with-deequ/
  2. https://aws.amazon.com/pt/blogs/big-data/testing-data-quality-at-scale-with-pydeequ/
  3. https://github.com/awslabs/python-deequ

--

--

Cícero Moura
Data Hackers

Arquiteto de Dados, pós-graduado em Big Data e Machine Learning. Palestrante em Big Data. Também sou AWS Community Builder e AWS Community Leader.