Git Product home page Git Product logo

teste_cognitivo_ai's Introduction

COGNITIVO.AI - Teste Técnico

Considerações sobre o ambiente de trabalho

Utilizei o notebook Apache Zeppelin 0.8.2, instalado localmente em ambiente Windows 10. Já trabalhei com Jupyter e Colaboratory, mas ultimamente uso intensamente o Zeppelin devido a sua flexibilidade com os interpretadores (utilizei o intepretador Spark). Meu ambiente de trabalho contou ainda com Java 1.8.0_221, Python 3.6.5 e Spark 2.4.5 (utilizei Pyspark). O código-fonte do teste encontra-se em repositório Github https://github.com/eder1985/teste_cognitivo_ai .

Requisito 1

Conversão do formato dos arquivos: Converter o arquivo CSV presente no diretório data/input/users/load.csv, para um formato colunar de alta performance de leitura de sua escolha. Justificar brevemente a escolha do formato;

R. Utilizei o formato PARQUET, por diversas vantagens: ele é um formato colunar, binário e que contém o metadado de seu conteúdo. Então, mesmo sem ler o conteúdo do arquivo, o Spark pode saber sobre nome das colunas, tipos de dados, enconding, taxa de compressão alta, etc. Este formato é otimizado para o paradigma WORM (Write Once Read Many). Tem baixo custo de I/O e pode ser configurado para altas taxas de compressão, utilizando pouco espaço do disco.

Lendo o arquivo bruto

Exibindo na ordem correta as colunas 'name' e 'email'

Salvando no disco local no formato PARQUET

Requisito 2:

Deduplicação dos dados convertidos: No conjunto de dados convertidos haverão múltiplas entradas para um mesmo registro, variando apenas os valores de alguns dos campos entre elas. Será necessário realizar um processo de deduplicação destes dados, a fim de apenas manter a última entrada de cada registro, usando como referência o id para identificação dos registros duplicados e a data de atualização (update_date) para definição do registro mais recente;

Criando tabelas temporárias e executando o join entre elas para gerar a tabela com dados deduplicados

Salvando no disco local a tabela com dados deduplicados

Requisito 3

Conversão do tipo dos dados deduplicados: No diretório config haverá um arquivo JSON de configuração (types_mapping.json), contendo os nomes dos campos e os respectivos tipos desejados de output. Utilizando esse arquivo como input, realizar um processo de conversão dos tipos dos campos descritos, no conjunto de dados deduplicados;

Lendo arquivos com dados deduplicados

Transformando o schema do Dataframe em um dicionário python

Lendo o arquivo types_mapping.json com os tipos de alguns campos

Iterando o dicionário de dados do schema original e alterando com os valores definidos no arquivo types_mapping.json

Aplicando o novo schema

Converti o schema alterado, de formato Dicionário para String e finalmente em StrutType. Após isso, recarreguei o Dataframe gerado na saída 2 já usando o novo schema alterado. Os tipos definidos no arquivo e os tipos inferidos pelo Spark foram os mesmos. Como comprovação que o schema original foi alterado, pode-se editar os tipos no arquivo json disponibilizado para 'string' e verá que os tipos são carregados desta origem.

Salvando o Dataframe no formato final

teste_cognitivo_ai's People

Contributors

eder1985 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.