← Volver a artículos
Noticias· 3 min de lectura

Migrar de Apache Spark 3 a Spark 4: lo que cambia y cómo prepararte

Rob Gibbon, de Canonical, ha publicado una guía para quienes mantienen cargas de datos y analítica sobre Apache Spark y tienen que dar el salto a la versión 4. No es un cambio menor: Spark 4 rompe compatibilidad en varios puntos que conviene mirar antes de tocar nada en producción.

Lo primero que vas a notar son los requisitos de versión. Scala 2.12 deja de estar soportado, así que toca migrar a Scala 2.13. En el lado de Java, la versión 17 pasa a ser la base recomendada y también funciona con Java 21; cualquier cosa por debajo de Java 17 queda fuera. Si tu pipeline arrastra dependencias antiguas, este es el punto que más trabajo te va a dar. Para la parte de Scala, el post menciona Scalafix, una herramienta open source que automatiza buena parte de los cambios de código.

Cambios que rompen compatibilidad

El más sonado es el modo ANSI SQL activado por defecto. Hasta ahora, una división por cero o un cast de tipo inválido te devolvía NULL y seguía adelante. En Spark 4, esas mismas operaciones lanzan una excepción en tiempo de ejecución. Es más estricto y más correcto, pero si tu código asumía el comportamiento antiguo, vas a ver fallos donde antes no los había.

El logging también cambia: ahora la salida estructurada en JSON es la opción por defecto. Si tienes sistemas de monitorización que parsean los logs en texto plano, prepárate para ajustarlos. Además, los imports javax.* hay que sustituirlos por jakarta.* para mantener la compatibilidad con servlets y XML, y RocksDB pasa a ser el backend por defecto para shuffle y para la gestión de estado en structured streaming.

Lo que ganas

No todo es trabajo. Spark 4 incorpora el tipo de dato VARIANT para datos semiestructurados como JSON, con mejor rendimiento en las consultas. Llega también la sintaxis de pipe en SQL con el operador |> para encadenar operaciones, y SQL procedural con scripts multi-sentencia, variables locales y control de flujo (lógica IF/WHILE). Por el lado de la IA, suma tipos de dato vectoriales e inferencia LLM por lotes optimizada.

Cómo plantear la migración

La guía recomienda hacerlo por fases en lugar de cambiarlo todo de golpe:

  1. Cambios de base. Actualiza Java y Scala, y valida los conectores de terceros.
  2. Validación en ejecución. Activa el modo ANSI SQL ya en Spark 3 para detectar problemas antes de migrar, y reemplaza las operaciones de riesgo por alternativas seguras como try_cast.
  3. Modernización de los habilitadores. Prueba los nuevos valores por defecto de RocksDB en streaming y valida tus sentencias CREATE TABLE.

En cuanto al orden de despliegue, la recomendación es empezar por las cargas batch, seguir con las de streaming y dejar para el final las analíticas y de soporte a la decisión. Tiene sentido: las batch son más fáciles de reejecutar y comparar resultados si algo sale mal.

Si despliegas Spark sobre Kubernetes, Canonical ofrece su solución Charmed para Apache Spark con Java 17 y 21 ya preconfigurados, además de opciones de soporte. Como suele pasar con su catálogo, encaja de forma natural si ya trabajas sobre Ubuntu.

Fuente

Guía publicada por Rob Gibbon en el blog de Canonical: Migrating from Apache Spark 3 to Spark 4. Contenido y producto de Canonical.