Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MBA FIAP Engenharia de dados - Data Engineering Programming

Projeto final da disciplina Data Engineering Programming do MBA em Engenharia de Dados da FIAP.


Objetivo

Gerar um relatório de pedidos de venda cujos pagamentos foram recusados (status=false) e que na avaliação de fraude foram classificados como legítimos (fraude=false), referentes ao ano de 2025, salvo em formato Parquet.


Estrutura do Projeto

mba-data-engineering-programmin/
│
├── main.py                              # Aggregation Root - ponto de entrada
│
├── config/
│   ├── __init__.py
│   └── app_config.py                   # Configurações centralizadas
│
├── session/
│   ├── __init__.py
│   └── spark_session_manager.py        # Gerenciamento da SparkSession
│
├── data_io/
│   ├── __init__.py
│   ├── data_reader.py                  # Leitura de pedidos (CSV) e pagamentos (JSON)
│   └── data_writer.py                  # Escrita em Parquet
│
├── business/
│   ├── __init__.py
│   └── orders_logic.py                 # Lógica de negócios (filtros, join, transformações)
│
├── pipeline/
│   ├── __init__.py
│   └── pipeline_orchestrator.py        # Orquestração do pipeline
│
├── test_orders_logic.py                # Testes unitários com pytest
│
├── pyproject.toml
├── requirements.txt
├── MANIFEST.in
└── README.md

Pré-requisitos

  • Python 3.9+
  • Java 8+ (necessário para o PySpark)
  • pip
  • Git

Instalação

1. Clone o repositório

git clone https://github.com/leo8nardo8/mba-data-engineering-programmin.git
cd mba-data-engineering-programmin

2. Crie e ative um ambiente virtual

python -m venv .venv

# Linux/macOS
source .venv/bin/activate

# Windows (PowerShell)
.venv\Scripts\Activate.ps1

3. Instale as dependências

pip install -r requirements.txt

4. Clone os datasets

Os datasets devem estar disponíveis localmente na raiz do projeto:

git clone https://github.com/infobarbosa/datasets-csv-pedidos.git
git clone https://github.com/infobarbosa/dataset-json-pagamentos.git

A estrutura esperada após clonar:

mba-data-engineering-programmin/
├── datasets-csv-pedidos/
│   └── data/pedidos/
└── dataset-json-pagamentos/
    └── data/pagamentos/

5. Configuração do Hadoop no Windows (somente Windows)

O PySpark no Windows requer o winutils.exe. Baixe os arquivos do repositório: https://github.com/cdarlint/winutils/tree/master/hadoop-3.3.5/bin

Crie a pasta C:\hadoop\bin\ e coloque os arquivos winutils.exe e hadoop.dll nela.

A configuração do HADOOP_HOME já está definida automaticamente no app_config.py:

os.environ["HADOOP_HOME"] = "C:\\hadoop"

Execução

python main.py

O relatório será gerado no diretório output/relatorio_pedidos_recusados/ em formato Parquet.

Exemplo de log esperado ao executar com sucesso:

INFO - Iniciando pipeline de orquestração...
INFO - Iniciando processamento da lógica de negócios...
INFO - Calculando valor total dos pedidos...
INFO - Normalizando campos de pagamentos...
INFO - Realizando join entre pedidos e pagamentos...
INFO - Aplicando filtros: status=False, fraude=False, ano=2025...
INFO - Selecionando colunas do relatório...
INFO - Processamento concluído. Total de registros: 1473
INFO - Gravando resultado em Parquet: output/relatorio_pedidos_recusados
INFO - Pipeline concluído com sucesso.

Testes Unitários

pytest test_orders_logic.py -v

Exemplo de saída esperada:

test_orders_logic.py::TestOrdersLogic::test_retorna_apenas_pedidos_recusados_legitimos_2025  PASSED
test_orders_logic.py::TestOrdersLogic::test_colunas_do_resultado                             PASSED
test_orders_logic.py::TestOrdersLogic::test_resultado_vazio_sem_registros_validos            PASSED

3 passed in 38.35s

Para execução com relatório de cobertura:

pytest test_orders_logic.py -v --cov=business --cov-report=term-missing

Atributos do Relatório Gerado

Coluna Descrição
id_pedido Identificador único do pedido
uf Estado (UF) onde o pedido foi feito
forma_pagamento Forma de pagamento utilizada
valor_total Valor total do pedido
data_pedido Data de criação do pedido

Ordenação: UF → forma_pagamento → data_pedido


Critérios de Filtro

  • pagamento.status = false → pagamento recusado
  • avaliacao_fraude.fraude = false → classificado como legítimo
  • ano(data_criacao) = 2025

Critérios Atendidos

Critério Descrição Status
Schemas explícitos Todos os DataFrames com schema definido ✅
Orientação a objetos Todos os componentes encapsulados em classes ✅
Injeção de dependências Dependências instanciadas e injetadas no main.py ✅
Configurações centralizadas Classe AppConfig com todos os parâmetros ✅
Sessão Spark Classe SparkSessionManager dedicada ✅
Leitura e Escrita (I/O) Classes DataReader e DataWriter ✅
Lógica de negócio Classe OrdersLogic com filtros e join ✅
Orquestração do pipeline Classe PipelineOrchestrator ✅
Logging Configurado na classe de lógica de negócios ✅
Tratamento de erros Estrutura try/except com logging de erros ✅
Empacotamento pyproject.toml, requirements.txt, MANIFEST.in ✅
Testes unitários 3 testes passando com pytest ✅

Datasets utilizados

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages