← Tornar als articles
Notícies· 3 min de lectura

Migrar d'Apache Spark 3 a Spark 4: què canvia i com preparar-t'hi

Rob Gibbon, de Canonical, ha publicat una guia per a qui manté càrregues de dades i analítica sobre Apache Spark i ara ha de fer el salt a la versió 4. No és un canvi menor: Spark 4 trenca compatibilitat en uns quants punts que val la pena mirar abans de tocar res en producció.

El primer que notaràs són els requisits de versió. Scala 2.12 deixa d’estar suportat, així que cal migrar a Scala 2.13. Pel costat de Java, la versió 17 passa a ser la base recomanada i també funciona amb Java 21; qualsevol cosa per sota de Java 17 queda fora. Si el teu pipeline arrossega dependències antigues, aquest és el punt que et donarà més feina. Per a la part de Scala, el post esmenta Scalafix, una eina open source que automatitza bona part dels canvis de codi.

Canvis que trenquen compatibilitat

El més sonat és el mode ANSI SQL activat per defecte. Fins ara, una divisió per zero o un cast de tipus invàlid et retornava NULL i seguia endavant. A Spark 4, aquestes mateixes operacions llancen una excepció en temps d’execució. És més estricte i més correcte, però si el teu codi assumia el comportament antic, veuràs errors on abans no n’hi havia.

El logging també canvia: ara la sortida estructurada en JSON és l’opció per defecte. Si tens sistemes de monitoratge que analitzen els logs en text pla, prepara’t per ajustar-los. A més, els imports javax.* cal substituir-los per jakarta.* per mantenir la compatibilitat amb servlets i XML, i RocksDB passa a ser el backend per defecte per al shuffle i per a la gestió d’estat en structured streaming.

El que hi guanyes

No tot és feina. Spark 4 incorpora el tipus de dada VARIANT per a dades semiestructurades com JSON, amb millor rendiment a les consultes. Arriba també la sintaxi de pipe a SQL amb l’operador |> per encadenar operacions, i SQL procedural amb scripts multi-sentència, variables locals i control de flux (lògica IF/WHILE). Pel costat de la IA, suma tipus de dada vectorials i inferència LLM per lots optimitzada.

Com plantejar la migració

La guia recomana fer-ho per fases en lloc de canviar-ho tot de cop:

  1. Canvis de base. Actualitza Java i Scala, i valida els connectors de tercers.
  2. Validació en execució. Activa el mode ANSI SQL ja a Spark 3 per detectar problemes abans de migrar, i reemplaça les operacions de risc per alternatives segures com try_cast.
  3. Modernització dels habilitadors. Prova els nous valors per defecte de RocksDB en streaming i valida les teves sentències CREATE TABLE.

Quant a l’ordre de desplegament, la recomanació és començar per les càrregues batch, seguir amb les de streaming i deixar per al final les analítiques i de suport a la decisió. Té sentit: les batch són més fàcils de reexecutar i comparar resultats si alguna cosa surt malament.

Si desplegues Spark sobre Kubernetes, Canonical ofereix la seva solució Charmed per a Apache Spark amb Java 17 i 21 ja preconfigurats, a més d’opcions de suport. Com sol passar amb el seu catàleg, encaixa de manera natural si ja treballes sobre Ubuntu.

Font

Guia publicada per Rob Gibbon al blog de Canonical: Migrating from Apache Spark 3 to Spark 4. Contingut i producte de Canonical.