Laboratorio de Apache Spark: aprende DataFrames y Spark SQL con un archivo CSV
Este laboratorio da a cada alumno un pequeño Apache Spark propio, con un archivo CSV de 24 pedidos ya cargado como DataFrame. Spark es una herramienta para trabajar con tablas de datos dividiendo el trabajo en jobs; el alumno le hace preguntas de dos maneras, con código de DataFrame y con SQL, y después abre la Spark UI para ver lo que hizo.
No es un laboratorio de ataque. Cada copia no tiene ruta a internet ni a ningún otro alumno: no se puede descargar nada en ella y nada de lo que hay en ella puede llegar a nadie más.
Qué aprenden los alumnos
Qué es un DataFrame: una tabla que Spark lee de un archivo, con sus columnas y los tipos que Spark deduce. Después filter para quedarse con algunas filas, groupBy y count para resumirlas, y la misma pregunta hecha en SQL sobre una tabla con el mismo nombre. Ven que las dos maneras producen el mismo tipo de plan, y que cada consulta que tiene que leer los datos se convierte en un job que se encuentra en la Spark UI, en la pestaña Jobs y en la pestaña SQL / DataFrame. Encaja en introducciones a la ingeniería de datos, al big data y a las bases de datos; comprueba la redacción exacta en la unidad de tu propio organismo certificador, aquí no se cita ninguna.
Ejecútalo en tu navegador
El laboratorio inicia un solo servicio, spark, y espera a que haya cargado el archivo, lo que tarda unos seis segundos. Es Spark en modo local: un solo proceso que contiene el driver y sus hilos de trabajo, que es lo que cabe en la memoria de una copia. No hay un máster y un worker que iniciar y detener. El terminal no tiene Spark propio, así que el servicio responde también en el puerto 8000: curl envía una consulta SQL a /sql, o una expresión de DataFrame a /df, y muestra el resultado como una tabla.
- Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
- Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca Apache Spark: DataFrames y SQL.
- Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
- Ábrelo. En la página del laboratorio, la barra del laboratorio tiene un enlace llamado Spark UI: púlsalo para ver la Spark UI en tu navegador, con sus pestañas Jobs, Stages y SQL / DataFrame. Después pulsa «Abre el terminal» y escribe curl -s -d 'SELECT * FROM orders LIMIT 5' http://spark:8000/sql para ver los cinco primeros pedidos. orders.count() enviado a /df responde 24.
Qué pedir a los alumnos que entreguen
El resultado de una consulta que hayan escrito ellos mismos sobre el archivo, como los ingresos totales por país (cantidad por unit_price, de mayor a menor, lo que pone a Japón primero con 717,5), la tabla que mostró, y una captura de pantalla de esa consulta en la Spark UI. Después una o dos frases, con sus propias palabras, sobre lo que hizo Spark. Nada se califica automáticamente: la frase muestra si lo han entendido. Para un trabajo más exigente, pide la misma respuesta en código de DataFrame y en SQL.
Una lección básica en este laboratorio
Spark Basics es una pequeña lección que se hace en este laboratorio. En ella el alumno mira las primeras filas, filtra los pedidos del Reino Unido, agrupa y cuenta los pedidos por país, pide en SQL los ingresos de cada país y después encuentra esas consultas en la Spark UI.
Las cuentas personales gratuitas la tienen en el módulo Basics, que está en Inicio, cada centro puede copiarla desde la carpeta Basics de la Biblioteca, y un centro nuevo la tiene en un módulo llamado Lab Basics (Sample). Es pequeña a propósito: muestra a un profesor qué es una lección que se hace en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para modificarla.
El código en GitHub
El archivo compose no tiene Dockerfile: ejecuta una sola imagen pública, la del propio proyecto Apache Spark, fijada a una versión, con un usuario sin privilegios y 512 MB de memoria. Apache Spark tiene licencia Apache-2.0 y no lo distribuimos nosotros. El archivo escribe también el CSV y el pequeño servicio de consultas al arrancar, así que no hay nada que construir. Los límites son honestos: es un solo Spark y no un clúster, los datos son 24 filas, así que los tiempos no dicen nada de cargas reales, una consulta que necesite mucha más memoria de la que tiene la copia fallará, y el laboratorio no tiene salida a internet. Nada se conserva cuando el laboratorio se detiene.
Asígnalo como trabajo
Indica en la tarea qué hay que entregar.
- Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-spark con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para usar tu propio archivo CSV.
- Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
- Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
- Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.
Preguntas frecuentes
- ¿Es un clúster de Spark?
- No. Es Spark en modo local, un solo proceso que hace el trabajo de un máster y sus workers, porque el servicio de una copia tiene 512 MB y un worker solo necesita más. Enseña el lado de DataFrame y SQL, no cómo se reparte el trabajo entre máquinas.
- ¿Por qué el terminal usa curl y no pyspark ni spark-sql?
- El terminal del laboratorio lleva curl, psql y algunos clientes más, y no tiene ni Spark ni Java. El servicio de Spark responde a una consulta enviada por HTTP y muestra el resultado, así que curl basta. En tu propio equipo puedes usar pyspark con las mismas ideas.
- ¿Pueden los alumnos usar sus propios datos?
- No dentro de una copia, que no tiene entrada para archivos. Haz un fork del repositorio, pon tus propias filas en el CSV de compose.yaml y asigna el fork como laboratorio.