Databricks Connect avec Azure Event Hubs
Je rencontre des problèmes en essayant d'exécuter du code Python sur Databricks en utilisant databricks-connectet en fonction d'une extension installée par Maven (dans ce cas, com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17trouvé sur la documentation officielle de Databricks pour l'intégration avec Azure EventHub
En ce qui concerne la connexion avec databricks-connect, tout est bien configuré (obtenu "Tous les tests réussis" avec databricks-connect test). Le package Maven com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17semble être "Installé" dans la section Bibliothèques de mon cluster).
Le code défectueux est cette simple ligne:
encrypted_string = sc._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(to_be_encrypted_string)
Produire la pile d'erreurs suivante:
INFO - Receiving data from EventHub using Databricks' PySpark...
20/09/29 17:50:57 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
20/09/29 17:50:59 WARN MetricsSystem: Using default name SparkStatusTracker for source because neither spark.metrics.namespace nor spark.app.id is set.
Traceback (most recent call last):
File "C:\Users\my_user\Desktop\projectABC\src\my_folder\my_project\cli.py", line 86, in <module>
connector()
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 782, in main
rv = self.invoke(ctx)
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\my_user\Desktop\projectABC\.venv\lib\site-packages\click\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "C:\Users\my_user\Desktop\projectABC\src\my_folder\my_project\cli.py", line 43, in test_data_process
prediction_connector.process_upstream_data()
File "c:\users\my_user\Desktop\projectABC\src\my_folder\my_project\command.py", line 224, in process_upstream_data
df = eventhub_consumer.receive_data_with_pyspark()
File "c:\users\my_user\Desktop\projectABC\src\my_folder\my_project\command.py", line 406, in receive_data_with_pyspark
eventhub_config = self._populate_pyspark_eventhub_config_file(spark_context=sc)
File "c:\users\my_user\Desktop\projectABC\src\my_folder\my_project\command.py", line 428, in _populate_pyspark_eventhub_config_file
eventhub_config = {'eventhubs.connectionString': spark_context._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(self.config.connection_string)}
TypeError: 'JavaPackage' object is not callable
Est-ce que je manque quelque chose d'évident à propos de l'installation du package Maven? Y a-t-il une étape supplémentaire pour l'utiliser avec Python? Merci pour ton aide !
Réponses
La fonctionnalité a quelques limites :
Les fonctionnalités Databricks suivantes et les plates-formes tierces ne sont pas prises en charge:
- Les utilitaires Databricks suivants: informations d'identification, bibliothèque, workflow de bloc-notes et widgets.
- Streaming structuré (y compris Azure Event Hubs)
- Exécution de code arbitraire qui ne fait pas partie d'un travail Spark sur le cluster distant.
- API natives Scala, Python et R pour les opérations de table Delta (par exemple, DeltaTable.forPath). Cependant, l'API SQL (spark.sql (...)) avec les opérations Delta Lake et l'API Spark standard (par exemple, spark.read.load) sur les tables Delta sont toutes deux prises en charge.
De plus, avec Databricks Connect, vous devez également avoir toutes les bibliothèques dans le chemin de classe local. Le scénario typique est celui où toutes les dépendances non Spark sont empaquetées dans jar-with-dependencies.