Servidor disponible solo los jueves de 10:30 a 12:30 y los viernes de 10:00 a 13:00 (hora de Madrid); fuera de ese horario está apagado. Fuera del horario, usa la documentación local del material que te descargaste (el README.md de cada carpeta).
G214 · CUNEF
Inicio / tema3 / 03.11-csvparquet

Tema 3 · 11 · Ejercicio D (opcional): de CSV a Parquet, filas frente a columnas

Presentación del Tema 3: ejercicio opcional de ampliación, sin diapositiva propia (explica por qué los formatos por columnas, como Parquet, ganan en analítica). Duración: 15 minutos (opcional). Coste: ninguno; esta actividad no usa AWS.

¿Dudas con un script? Todos los scripts de esta carpeta traen su propia ayuda: python3 csv-a-parquet.py --ayuda (también vale --help o -h) explica los pasos y las opciones. Este README.md es el paso a paso de la actividad: tenlo a mano y consúltalo antes de preguntar.

Qué vas a hacer

Vas a convertir un CSV con tus propios datos (los 48 estudiantes de tema3_estudiantes.sql) a Parquet, un formato por columnas, y a comparar tamaños y lecturas para ver por qué los formatos por columnas ganan en analítica y por qué un Parquet no se edita (se reescribe entero). Enseña, con datos tuyos, cuándo conviene un motor por filas (como MariaDB/RDS) y cuándo uno por columnas (como Redshift o Athena sobre Parquet).

estudiantes.csv ──csv-a-parquet.py (pyarrow)──> .parquet ──> comparación de tamaños, lectura de una sola columna

Qué se crea en AWS: nada. Todo ocurre en tu PC o en CloudShell, con ficheros locales.

Qué contiene esta carpeta

Fichero Para qué sirve En qué paso se usa
estudiantes.csv Los 48 alumnos de tema3_estudiantes.sql en CSV, con cabecera (id,nombre,apellidos,grupo,num_convocatoria,derecho_a_examen) Pasos 2 y 3
csv-a-parquet.py Convierte un CSV con cabecera a Parquet y compara tamaños (necesita pyarrow; no usa AWS) Pasos 2 y 3
README.md Esta guía Siempre

Antes de empezar

Cómo llevar los ficheros a donde toque

Elige UNA de las dos formas:

unzip -o 03.11-csvparquet.zip && cd 03.11-csvparquet && chmod -R u+rwX .
sed -i 's/\r$//' *.py
chmod +x *.py
ls

Si ya subiste g214-materiales.zip (README principal), no necesitas este zip: entra con cd ~/g214-materiales/tema3/03.11-csvparquet y, si algún fichero da Permission denied, ejecuta allí chmod -R u+rwX . && chmod +x *.py.

Qué verás: ls muestra README.md, csv-a-parquet.py y estudiantes.csv.

Paso a paso

Paso 1. Instalar pyarrow.

pip install pyarrow          # en tu PC
pip3 install --user pyarrow  # en CloudShell

Qué verás: Successfully installed pyarrow-.... Si ejecutas el script sin él, dice Falta pyarrow. Instálalo con: pip3 install --user pyarrow (en tu PC: pip install pyarrow).

Paso 2. Convertir los 48 alumnos.

python3 csv-a-parquet.py estudiantes.csv            # 48 filas

Paso 3. Replicar las filas para ver el efecto a escala.

python3 csv-a-parquet.py estudiantes.csv 20000      # 960.000 filas (48 x 20.000)

Qué verás (medido con pyarrow 25.0.1, compresión snappy; puede variar un poco con otra versión):

Filas CSV Parquet Relación
48 1.154 bytes 2.508 bytes el Parquet pesa 2,2 veces más
48.000 1.523.966 bytes 293.242 bytes el CSV pesa 5,2 veces más
960.000 31.548.967 bytes 4.221.653 bytes el CSV pesa 7,5 veces más

El script también imprime el esquema, lee solo la columna grupo y muestra cuánto ocupa cada columna dentro del fichero: con 960.000 filas, grupo son 14.767 bytes, el 0,35 % (la columna id es el 97,5 %, porque sus valores no se repiten y no comprimen).

Paso 4. Responde a las preguntas del ejercicio.

Errores frecuentes

Síntoma Causa Solución
Falta pyarrow. Instálalo con: pip3 install --user pyarrow No está instalada la librería pip install pyarrow (PC) o pip3 install --user pyarrow (CloudShell)
El script imprime la ayuda y termina No pasaste el CSV como argumento (o pasaste -h) python3 csv-a-parquet.py estudiantes.csv
Permission denied al lanzar ./csv-a-parquet.py (CloudShell) Sin permiso de ejecución chmod +x csv-a-parquet.py o python3 csv-a-parquet.py ...
bad interpreter o $'\r': command not found Finales de línea de Windows sed -i 's/\r$//' *.py y repite
Tus tamaños no coinciden exactamente con la tabla Otra versión de pyarrow Es normal; lo importante es la relación

Limpieza

Los ficheros replica_x*.csv y *.parquet que crea el script son solo de prueba: bórralos al terminar (rm replica_x*.csv *.parquet en Linux/CloudShell/Git Bash; en PowerShell, Remove-Item replica_x*.csv, *.parquet). No hay recursos de AWS que borrar.

Esta es la última actividad del tema. Si no lo has hecho ya, termina la limpieza general: Adminer (03.02), después la RDS y el Security Group BaseDeDatos (03.01), el visor (03.08) y las tablas de DynamoDB (03.07 y 03.10).

Cómo sabes que has terminado

Anterior: 03.10 · Ejercicio adicional C · Siguiente: (ninguna, es la última del Tema 3)