Databricks Connect avec Azure Event Hubs

Sep 30 2020

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

3 nefo_x Sep 30 2020 at 04:30

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.