Désormais disponible dans Databricks Runtime 19 Beta
par Wenchen Fan, Andreas Neumann, Serge Rielau, Szehon Ho, Gengliang Wang, Linhong Liu, Hyukjin Kwon, Jerry Peng, DB Tsai, Xiao Li et Reynold Xin
Apache Spark 4.2 intègre une plus grande partie de l'infrastructure moderne de données et d'AI directement dans le moteur. S'appuyant sur Spark 4.x, cette version ajoute des métriques gouvernées, des primitives vectorielles et top-K, un parcours Python plus orienté Arrow, une capture de données modifiées (CDC) de premier ordre, ainsi que des bases opérationnelles et de streaming plus solides.
Cela rend Spark plus utile des deux côtés d'une application d'AI. Il améliore la qualité et la fraîcheur des données fournies aux agents d'AI, et permet aux applications et aux agents d'invoquer plus facilement Spark en tant que service d'exécution à distance. L'intégration de l'AI est concrète : une sémantique fiable, des primitives de récupération natives, des données modifiées fraîches et des interfaces ouvertes pour le calcul à l'échelle de Spark.
Spark 4.2 se résume en quatre grands avantages :
Ensemble, ces changements aident les entreprises à utiliser un seul moteur ouvert pour préparer les données, définir la signification métier, récupérer le contexte pertinent et maintenir à jour les applications analytiques et d'AI.
Spark 4.2 introduit les vues métriques, apportant une couche sémantique native à Spark SQL. Les équipes peuvent définir des métriques métier une seule fois et les utiliser de manière cohérente dans les tableaux de bord, les rapports, les applications et les outils d'AI.
C'est important car de nombreuses métriques clés ne sont pas additives de manière sûre. Les ratios, les décomptes distincts, la rétention et d'autres mesures similaires peuvent produire des résultats incorrects lorsque chaque utilisateur réécrit la formule à un niveau de granularité différent. Les vues métriques font des dimensions et des mesures des objets de premier ordre compris par Spark, ce qui permet au moteur de préserver la sémantique d'agrégation souhaitée.
Une fois qu'une vue métrique est définie, les utilisateurs peuvent interroger les mêmes mesures gouvernées selon différentes dimensions :
Pour les applications d'AI, c'est particulièrement important. Un agent ne doit pas calculer le chiffre d'affaires différemment d'un tableau de bord, ni renvoyer une réponse différente lorsqu'un utilisateur modifie le regroupement demandé. Une vue métrique gouvernée offre au SQL, à la BI et à l'AI une source unique de vérité, avec l'analyse Spark, la résolution de catalogue et les autorisations appliquées de manière cohérente.
Spark Connect sépare le client du serveur Spark via un protocole basé sur gRPC et Arrow. Un client construit un plan logique, le serveur l'analyse et l'exécute, et les résultats sont renvoyés sous forme de lots Arrow. Le client n'a pas besoin d'un runtime Spark complet ou d'une JVM colocalisée.
Cela facilite l'intégration de Spark dans les notebooks, les services, les outils de développement et les applications d'AI. Un agent ou une application peut appeler Spark depuis son propre runtime, tandis que Spark conserve l'analyse, l'optimisation, l'exécution et la gouvernance sur le serveur.
Spark 4.2 continue de réduire l'écart de compatibilité avec Spark Classic. Les améliorations incluent une meilleure compatibilité de l'API RDD, des entrées DataFrame pour spark.read.* et SparkSession.emptyDataFrame, une meilleure débogabilité, la propagation des erreurs, le rapport d'état et la prise en charge du mode cluster YARN. Ensemble, ces changements rendent PySpark et Spark Connect plus rapides, plus compatibles et plus faciles à exploiter à grande échelle et à distance.
Python reste l'un des principaux moyens par lesquels les utilisateurs créent des charges de travail de données et d'AI avec Spark. Dans Spark 4.2, l'exécution des UDF Python optimisées pour Arrow est activée par défaut, de sorte que les UDF existantes peuvent utiliser le parcours colonnaire plus rapide sans réécriture de code. La prise en charge de Pandas 3 facilite également la mise à niveau des environnements Python aux côtés de Spark.
Pour le code nécessitant plus de contrôle, les UDF Arrow conservent les données dans des tableaux PyArrow et évitent une conversion Pandas inutile. Spark étend également le profilage et le débogage pour l'exécution de Python, y compris le profilage temporel et de mémoire pour les sources de données Python, l'amélioration des diagnostics des workers et la journalisation pouvant être interrogée sous forme de données.
Spark 4.2 améliore également l'interopérabilité grâce à l'interface de données Arrow C et au protocole PyCapsule. Lorsque les deux côtés le prennent en charge, les DataFrames Spark peuvent être transférés vers des outils natifs d'Arrow tels que Polars ou DuckDB sans copier ni sérialiser les données sous-jacentes. Cela réduit le code de liaison entre le traitement à l'échelle de Spark et l'écosystème Python et d'AI plus large.
Les sources de données Python réduisent encore les frictions d'intégration. Les équipes peuvent créer des lecteurs et des écrivains par lots ou en streaming en Python, les enregistrer une seule fois et les utiliser via l'interface de source de données standard de Spark. Dans la version 4.2, le profilage facilite le réglage et l'exploitation de ces connecteurs au lieu de les traiter comme des boîtes noires.
Spark 4.2 ajoute de nouvelles primitives SQL pour la recherche de similarité vectorielle, le classement et l'analyse de séries temporelles. Cette version introduit des fonctions de distance et de similarité vectorielles, la normalisation vectorielle, l'agrégation vectorielle et NEAREST BY, une jointure de classement top-K pour la correspondance basée sur la distance. Ces primitives permettent la récupération, les recommandations, la résolution d'entités et la génération de candidats à grande échelle.
Les types intégrés GEOMETRY et GEOGRAPHY ainsi que les fonctions ST_* permettent des analyses géolocalisées sans extensions spatiales externes. Spark 4.2 ajoute également la prise en charge de Parquet, WKT/WKB, la préservation du SRID et la conversion Python.
Avec Spark 4.2, vous pouvez invoquer de manière univoque les fonctions fournies par Spark en les qualifiant avec SYSTEM.BUILTIN. En suivant le précédent des variables de session, vous pouvez également qualifier entièrement les vues temporaires avec SYSTEM.SESSION. Ceci est utile pour lever toute ambiguïté par rapport aux fonctions définies par l'utilisateur ou aux relations persistantes, et pour empêcher l'injection.
Spark 4.2 ajoute la prise en charge du chemin de recherche SQL avec SET PATH, ce qui facilite la résolution des tables, des fonctions et des variables entre les espaces de noms, ainsi que vers les bibliothèques d'objets simplement en ajoutant des schémas au chemin.
Spark persiste le chemin SQL dans les vues et les fonctions SQL pour une résolution de noms prévisible.
À partir de Spark 4.2, les scripts SQL peuvent utiliser DECLARE, OPEN, FETCH et CLOSE pour les curseurs. Cela permet un meilleur contrôle sur le traitement ligne par ligne des ensembles de résultats, ce qui nécessitait auparavant de sortir du SQL pour utiliser des DataFrames.
Spark SQL ajoute également des sketches Tuple, time_bucket pour l'analyse de séries temporelles, une prise en charge plus large du type TIME sur tous les formats de fichiers, QUALIFY pour filtrer les résultats de fenêtre, Top-K max_by et min_by, ainsi que la prise en charge de IGNORE NULLS and RESPECT NULLS pour les fonctions d'agrégation courantes.
Ensemble, ces ajouts rendent Spark SQL plus expressif pour les applications analytiques modernes.
Spark 4.2 introduit la prise en charge d'Auto CDC dans Spark Declarative Pipelines (SDP), apportant un traitement SCD (Slow Changing Dimensions) de type 1 de premier ordre dans Spark. Avant Auto CDC, la consommation d'un flux de modifications et son application à une table cible nécessitaient une logique de fusion écrite à la main qui pouvait facilement devenir complexe et sujette aux erreurs, en raison de la gestion des suppressions et des événements de modification désordonnés. Avec Auto CDC, les utilisateurs peuvent simplement configurer la manière dont les événements CDC doivent mettre à jour une table cible et laisser Spark gérer la complexité.
Auto CDC fournit une API Python pour appliquer les modifications CDC à une table cible SCD de type 1. Il est conçu pour les charges de travail courantes d'ingestion et de réplication où la dernière version de chaque enregistrement doit être conservée de manière fiable, comme les profils clients, les catalogues de produits, les enregistrements de comptes et les données de référence opérationnelles.
Par exemple, un flux Auto CDC peut désormais être exprimé de manière déclarative :
En plus d'Auto CDC, Spark Declarative Pipelines bénéficie également d'un renforcement important de la plateforme, notamment une gestion côté serveur plus sécurisée pour l'analyse hâtive et des identifiants structurés pour les flux. Ensemble, ces changements rendent le développement de pipelines déclaratifs plus fiable et fournissent à Spark une base pour des modèles d'ingénierie de données de plus haut niveau.
Le Real-Time Mode (RTM) dans Structured Streaming permet aux requêtes de streaming de traiter les données avec une latence de bout en bout de l'ordre de la milliseconde. Cela a permis à Spark d'ouvrir la voie à de toutes nouvelles catégories de cas d'usage, et devient le fondement d'applications de données opérationnelles telles que la détection des fraudes, la personnalisation, l'observabilité et le feature engineering en temps réel.
Dans Spark 4.2, nous avons étendu le RTM à PySpark : vous pouvez désormais exécuter des requêtes de streaming sans état (sans UDF Python) en Real-Time Mode. Python est un choix populaire parmi les data scientists et les ingénieurs pour sa facilité d'utilisation, et cela apporte le traitement à faible latence du RTM à un public beaucoup plus large.
En prévision de la prochaine version de Spark 4.x, nous apportons un support avec état (stateful) au RTM — et le travail est déjà en cours. Cet effort est suivi dans SPARK-54699 avec trois composants majeurs :
Au-delà du support avec état, nous travaillons également à activer les UDF Python (SPARK-57237) dans le RTM.
Restez à l'écoute — et nous serions ravis de recevoir vos commentaires et contributions !
Spark 4.2 marque une autre étape majeure pour Data Source V2. DSv2 devient le socle standard pour les connecteurs qui exposent les lectures, les écritures, les opérations au niveau des lignes, l'évolution des schémas, les données de changement (change data), les métriques d'opération et les transactions via Spark.
Spark 4.2 ajoute un support de premier ordre pour la capture de données modifiées (CDC) à DSv2. Les connecteurs peuvent exposer des flux de modifications via une API standard, et les utilisateurs peuvent les interroger avec la nouvelle clause SQL CHANGES, les API DataFrame et les liaisons PySpark. Spark gère également le post-traitement courant dans le moteur — en éliminant les reports de copie sur écriture (copy-on-write), en détectant les mises à jour et en calculant les changements nets par ligne. La même requête se comporte de manière cohérente sur n'importe quel connecteur DSv2 prenant en charge le CDC.
Spark 4.2 améliore encore le support des opérations DML au niveau des lignes dans les connecteurs Data Source V2 (DSv2). MERGE INTO bénéficie d'améliorations de performances supplémentaires, notamment la génération de code sur l'ensemble de l'étape (whole-stage code generation), ainsi que d'autres améliorations des capacités d'évolution de schéma introduites dans Spark 4.1.
L'évolution des schémas est désormais également prise en charge pour les opérations INSERT INTO, tant pour la résolution de colonnes par nom que par position, ce qui réduit les frictions lors de l'écriture dans des tables évolutives. De plus, des résumés d'opérations sont maintenant disponibles pour UPDATE et DELETE, complétant les résumés MERGE INTO ajoutés dans Spark 4.1. Les métriques de MERGE INTO ont également été élargies et affinées.
Spark 4.2 introduit des briques de base supplémentaires pour les connecteurs DSv2 de niveau production et les formats de table lakehouse. Les ajouts clés comprennent les bases d'une API de transaction, un filtrage amélioré des statistiques de partition, des améliorations des jointures partitionnées par stockage, et un alignement plus étroit entre les commandes et comportements DSv1 et DSv2. Ensemble, ces améliorations font de DSv2 une plateforme plus complète pour implémenter des connecteurs lakehouse, des formats de table transactionnels et d'autres systèmes de données à grande échelle.
Spark 4.2 comprend plusieurs améliorations de la plateforme qui rendent Spark plus facile à exploiter, déboguer, sécuriser et mettre à l'échelle. L'interface utilisateur Web de Spark (Spark Web UI) bénéficie d'une modernisation majeure avec Bootstrap 5, le mode sombre, une meilleure visualisation des plans SQL, des améliorations de la chronologie des requêtes et la pagination côté serveur. Le support de Kubernetes s'améliore avec la gestion d'exécuteurs hétérogènes, des API de gestionnaire de ressources stables et une réduction de la charge du plan de contrôle. Spark 4.2 ajoute également le support du JDK 25, améliore la sécurité web, met à l'échelle le Spark History Server et met à niveau des dépendances clés, notamment Scala, Parquet, ORC, Arrow, Netty et Hadoop.
Spark 4.2 reflète la force de la communauté Apache Spark, avec plus de 1 900 commits de la part de plus de 260 contributeurs. Nous remercions tous ceux qui ont contribué au code, aux revues, aux tests, à la documentation et aux retours pour rendre cette version possible.

Téléchargez Apache Spark 4.2 depuis spark.apache.org/downloads et consultez les notes de version complètes d'Apache Spark 4.2 pour obtenir la liste complète des modifications. Apache Spark 4.2 sera également disponible dans Databricks Runtime 19 Beta.

(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original
Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.