Trabajo practico para la materia Programación Concurrente en el cual se implementa un programa en Rust para procesar datasets de PUBG y obtener estadísticas sobre jugadores y armas, utilizando concurrencia con el modelo Fork-Join.
El objetivo del trabajo práctico es analizar un dataset con dumps de partidas de PUBG (disponible en Kaggle) para generar estadísticas sobre:
- Top 10 de armas más usadas para matar (
killed_by), con el porcentaje de muertes respecto al total y el promedio de distancia entre asesino y víctima. - Top 10 de jugadores con más muertes (
killer_name), con la cantidad total de muertes y el top 3 de armas más usadas por el jugador, con porcentaje de uso.
La idea es aprovechar la concurrencia en Rust para procesar múltiples archivos CSV.
Requisitos
- Rust stable (última versión).
- Funciona en Unix / Linux.
- No se permiten crates externos salvo
serde_jsonpara manejo de JSON. - Código libre de
warningsde compilador yclippy. - Uso de cargo fmt y documentación con cargo doc.
- Cada struct/funcción en archivo independiente.
Se puede acceder al enunciado del trabajo practico.
Compilar y ejecutar el programa:
cargo run <input-path> <num-threads> <output-file-name>Donde:
<input-path>: Directorio con archivos.csv.<num-threads>: Cantidad de threads para procesamiento concurrente.<output-file-name>: Nombre del archivo de salida JSON.
cargo run ~/Downloads/dataset/deaths 4 output.jsonEl formato de salida con el dataset completo debe ser igual a la del archivo expected_output.json, sin importar el orden de aparición de las keys en los mapas.
Se utiliza el modelo Fork-Join:
- Cada archivo CSV se procesa de manera paralela en threads separados.
- Luego se combinan los resultados parciales usando las funciones merge_killers y merge_weapons_stats.
La cantidad de threads se puede ajustar por argumento de línea de comando.