https://github.com/tonsatomicos/yugioh-api-with-spark
Projeto acadêmico: extração, processamento e persistência dos dados da API do Yu-Gi-Oh! TCG.
https://github.com/tonsatomicos/yugioh-api-with-spark
docker python requests spark
Last synced: 11 months ago
JSON representation
Projeto acadêmico: extração, processamento e persistência dos dados da API do Yu-Gi-Oh! TCG.
- Host: GitHub
- URL: https://github.com/tonsatomicos/yugioh-api-with-spark
- Owner: tonsatomicos
- Created: 2024-08-07T19:38:33.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-11T18:00:26.000Z (over 1 year ago)
- Last Synced: 2025-01-17T02:33:12.256Z (about 1 year ago)
- Topics: docker, python, requests, spark
- Language: Jupyter Notebook
- Homepage:
- Size: 127 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
#
Projeto de Processamento Distribuído
API Yu-Gi-Oh! TCG
Este projeto foi desenvolvido como parte de um desafio na disciplina de Processamento Distribuído do curso de pós-graduação em Engenharia de Dados na Universidade de Fortaleza (Unifor).
O objetivo principal do desafio era explorar e aplicar o Apache Spark para processamento de dados distribuído.
Como caso de uso, escolhi trabalhar com dados da API do Yu-Gi-Oh! TCG. Utilizei a biblioteca requests para a extração dos dados e o pyspark para a transformação e carregamento, todos executados em um ambiente Docker configurado com o Spark.
## Etapas
## Estrutura
A estrutura do projeto foi organizada para ser replicável e de fácil manutenção. Utilizei Docker para criar os containers necessários e configurar o ambiente de execução. O arquivo pyproject.toml foi utilizado para gerenciar as dependências.
### Versão do Python
```bash
3.11.9-bullseye
```
### Dependências | Produção
- pyspark
- requests
- loguru
### Dependências | Desenvolvimento
- ipykernel
- flake8
- black
- isort
- sparksql_magic
- pre-commit
## Configuração e Execução
Como mencionado anteriormente, optei por desenvolver o projeto utilizando a infraestrutura fornecida pelos containers Docker. Todo o ambiente está configurado para fácil replicação. Não abordarei os detalhes técnicos aqui, mas sinta-se à vontade para adaptar o projeto, com ou sem Docker.
No entanto, faz sentido que, ao tentar replicar este projeto, você siga a mesma abordagem que eu e utilize Docker. Isso garantirá que o ambiente e as dependências estejam configuradas corretamente, proporcionando uma experiência mais consistente e eficiente.
### Como usar?
#### Clone o Repositório
Execute o seguinte comando:
```bash
git clone https://github.com/tonsatomicos/yugioh-api-with-spark.git
```
#### Inicie os Containers
Navegue até a pasta raiz do projeto e execute o seguinte comando para iniciar os containers Docker:
```bash
docker compose -f docker-compose.yml up -d --scale spark-worker=2
```
> Nota: Se estiver no Windows, certifique-se de que os arquivos Dockerfile, docker-compose.yml e entrypoint.sh estejam com a formatação LF, e não CRLF.
Este comando iniciará os containers e escalará o número de workers do Spark conforme definido no arquivo docker-compose.yml.
#### Execute o Pipeline Principal
Acesse o container master utilizando o terminal ou VSCode. Navegue até a pasta /opt/spark/yugioh-with-spark e execute:
```bash
python yugioh-with-spark/pipeline/pipeline_main.py
```
## Conclusão
Monitore o andamento do pipeline acompanhando os logs gerados durante a execução. Eles serão armazenados na pasta /logs, e os resultados do processamento estarão disponíveis na pasta /data/output.
Você também pode monitorar o status dos workers e da aplicação no Spark Master através do link http://localhost:9091/ e visualizar os logs da aplicação no History Server em http://localhost:18081/.
## Considerações Finais
- A documentação pode não estar totalmente detalhada, e um certo nível de conhecimento pode ser necessário para entender o projeto.
- Um Jupyter Notebook está disponível na pasta /notebook, oferecendo uma visão simplificada e mais direta do projeto.
- O projeto foi estruturado utilizando os princípios SOLID, visando manter uma arquitetura limpa e extensível.
