Sources de données Spark
L’API Spark Data Source vous permet de lire et d’écrire dans des bases de données externes directement depuis Databricks. Utilisez-le uniquement lorsque vous avez besoin de toute la flexibilité du moteur Spark, que vous souhaitez exécuter des requêtes natives sur la source ou que vous avez besoin d’un accès en écriture aux systèmes externes. En général, Databricks recommande un accès régi et en lecture seule avec transfert automatique des requêtes Spark ou SQL. Voir Qu’est-ce que la fédération de query ?.
L'API Spark Data Source a des comportements spécifiques pour la connectivité, l'exécution de query et la détection de schéma.
- La charge de travail principale et toutes les Transformations Spark ultérieures s'exécutent sur le cluster Spark de Databricks.
- Lors de l'utilisation de l'option
query, l'instruction SQL spécifiée s'exécute entièrement sur la source de données externe. Spark récupère les résultats sans effectuer de pushdown de Transformations sur la chaîne de query. - La connexion nécessite un connecteur fourni par Databricks, un Driver JDBC fourni par l'utilisateur ou une source de données personnalisée PySpark.
- Spark lit automatiquement le schéma de la table de base de données externe et mappe ses types aux types Spark SQL.
Utilisez un connecteur intégré
Databricks Runtime inclut des connecteurs optimisés pour les sources de données courantes. Consultez les connecteurs regroupés pris en charge pour la liste complète.
Les connecteurs groupés utilisent host et port comme options distinctes au lieu d'une chaîne d'URL JDBC complète.
Lisez les données à l’aide d’une query pass-through
L'option query garantit que la logique de filtrage et de jointure s'exécute sur la base de données source avant que les données n'atteignent Spark. Pour un accès en lecture gouverné avec un pushdown de query automatique et une délégation d'autorisations Unity Catalog via des vues, envisagez plutôt les queries distantes.
df = (spark.read
.format("sqlserver")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("query", "SELECT id, name FROM users WHERE active = 1")
.load())
Écrire des données
Spécifiez un mode d'écriture avec .mode() pour contrôler comment les données sont écrites. Utilisez append pour ajouter des lignes à une table existante ou overwrite pour en remplacer le contenu.
(df.write
.format("sqlserver")
.mode("overwrite")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("dbtable", "<table-name>")
.save())
Utiliser une connexion UC JDBC
Si un connecteur spécifique à la source n'est pas fourni, ou si vous souhaitez utiliser une version spécifique du Driver JDBC, utilisez une connexion JDBC Unity Catalog. Cela vous permet de centraliser la gestion des informations d'identification et d'apporter votre propre Driver JDBC.
Une connexion JDBC Unity Catalog offre plusieurs avantages par rapport à l'utilisation directe d'un connecteur groupé ou d'un Driver JDBC brut. Avec une connexion JDBC Unity Catalog, vous pouvez :
- Utilisez votre propre fichier JAR de Driver JDBC pour toute base de données prenant en charge JDBC.
- Créez la connexion une seule fois et réutilisez-la sur des clusters Serverless, standard et dédiés.
- Utilisez l'accès géré à la source de données à l'aide d'un objet de connexion Unity Catalog.
- Masquer les identifiants de connexion à l'utilisateur qui effectue la requête.
- Lire et écrire dans des bases de données externes via l'API Spark Data Source.
Pour utiliser une connexion JDBC Unity Catalog, spécifiez databricks.connection dans vos options Spark :
df = (spark.read
.format("jdbc")
.option("databricks.connection", "<connection-name>")
.option("query", "SELECT * FROM external_table")
.load())
Pour les instructions de configuration, consultez Connexion JDBC.
Utilisez un connecteur personnalisé sur des clusters dédiés
Sur les clusters dédiés (classiques), vous pouvez installer des connecteurs de source de données Spark tiers ou des Drivers JDBC qui ne sont pas fournis avec Databricks Runtime.
Utilisez cette approche lorsque :
- Vous avez besoin d'un connecteur Spark tiers pour des systèmes tels que : MongoDB, Cassandra, Couchbase ou Elasticsearch.
- Vous avez besoin d'une version de Driver spécifique qui n'est pas fournie dans le runtime.
- Vous souhaitez installer un driver JDBC directement sur le cluster sans configurer de connexion Unity Catalog.
Installez un connecteur ou un Driver
Installez la bibliothèque sur votre cluster via **Compute** > **votre cluster** > **Bibliothèques** > **Installer de nouvelles**. Vous pouvez utiliser les coordonnées Maven directement sans download ou upload de JAR. Redémarrez le cluster pour que la bibliothèque prenne effet.
Lire les données
Une fois le connecteur installé, utilisez le nom du format du connecteur et ses options de connexion requises pour lire les données.
df = (spark.read
.format("mongodb")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.load())
Écrire des données
Utilisez le même nom de format et les mêmes options de connexion pour réécrire les données à la source.
(df.write
.format("mongodb")
.mode("overwrite")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.save())
Considérations
Gardez à l'esprit ce qui suit lorsque vous utilisez des connecteurs personnalisés sur des clusters dédiés.
- Le Driver ou le connecteur est disponible uniquement sur le clusters où il est installé.
- Les fichiers JAR Spark tiers personnalisés ne sont pas pris en charge sur les clusters Databricks SQL, serverless ou en mode d'accès standard. Pour ces types de compute, utilisez les connecteurs groupés ou les connexions JDBC Unity Catalog.
Sources de données personnalisées PySpark
L'API Python DataSource vous permet de créer des connecteurs de données personnalisés entièrement en Python, sans JAR ni bibliothèques basées sur JVM. Utilisez ceci lorsque vous devez vous connecter à des API REST, des applications SaaS ou tout système sans interface JDBC, ou lorsque vous souhaitez générer des données synthétiques par programmation. L'API prend en charge les lectures et les écritures en batch et en streaming.
Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15,4 LTS ou une version ultérieure.
Pour la configuration, des exemples et la référence de l’API, voir sources de données personnalisées PySpark.
Comparez les stratégies d'intégration
Le tableau suivant compare l'API de source de données Spark par rapport à Lakehouse Federation et Lakeflow Connect pour vous aider à choisir la bonne approche pour votre cas d'utilisation.
Fonctionnalité | API de source de données Spark | Lakehouse Federation | LakeFlow Connect |
|---|---|---|---|
Cas d'usage principal | ETL complexe, logique Spark personnalisée, requêtes pass-through | Requêtes ad hoc, rapports BI | Ingestion automatisée à grande échelle |
Déplacement des données | Chargé dans la mémoire Spark (éphémère) | Chargé dans la mémoire Spark (éphémère) | Copié vers Delta Lake (persistant) |
Exécution de la query | Pushdown manuel utilisant l'option native | Descente automatique des filtres, jointures et agrégations Spark et SQL. | Non applicable (réplication complète de la table) |
Gouvernance | Connexion Unity Catalog (JDBC) ou secret scopes | Unity Catalog (catalogue fédéré) | Unity Catalog (pipeline géré) |
Idéal pour | Utilisateurs avancés ayant besoin de toute la flexibilité de Spark | Minimiser le déplacement des données tout en préservant la gouvernance. | Pipelines CDC et d'ingestion de production |
Connecteurs groupés pris en charge
Les sources de données suivantes sont intégrées à Databricks Runtime et peuvent être appelées directement via Spark. Les lectures et écritures sont prises en charge sur les clusters dédiés et standards.
Les écritures sur le compute serverless sont prises en charge pour PostgreSQL, SQL Server, MySQL, Snowflake et Redshift. Consultez les options d'écriture Serverless pour les connecteurs groupés pour connaître les options de connecteur prises en charge.
Source de données |
|
|---|---|
PostgreSQL |
|
SQL Server |
|
MySQL et MariaDB |
|
Snowflake |
|
Amazon Redshift |
|
Google BigQuery |
|
Azure Synapse |
|
HTTP |
|
Limitations
Les limitations suivantes s'appliquent lors de l'utilisation de l'API Spark Data Source dans Databricks.
- Les options Spark pour les sources de données groupées sont limitées à
query,dbtableet un petit ensemble d’options spécifiques aux connecteurs. - Les JAR Spark tiers personnalisés peuvent être installés uniquement sur des clusters dédiés. Pour les clusters serverless ou standard, utilisez les connecteurs groupés ou les connexions JDBC Unity Catalog.
- Les sources de données personnalisées PySpark nécessitent Databricks Runtime 15,4 LTS ou une version ultérieure.