Databricks Connect with Azure Event Hubs

Sep 30 2020

Sto riscontrando problemi durante il tentativo di eseguire del codice Python su Databricks utilizzando databricks-connecte in base a un'estensione installata da Maven (in questo caso com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17trovata nella documentazione ufficiale di Databricks per l'integrazione con Azure EventHub

Per quanto riguarda la connessione con databricks-connect, è tutto ben impostato (ottenuto "Tutti i test superati" con databricks-connect test). Il pacchetto Maven com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17sembra essere "installato" nella sezione Librerie del mio cluster).

Il codice difettoso è questo semplice rivestimento:

encrypted_string = sc._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(to_be_encrypted_string)

Produzione del seguente stack di errori:

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

Mi manca qualcosa di ovvio qui sull'installazione del pacchetto Maven? C'è un passaggio aggiuntivo per usarlo con Python? Grazie per l'aiuto !

Risposte

3 nefo_x Sep 30 2020 at 04:30

La funzionalità ha alcune limitazioni :

Le seguenti funzionalità di Databricks e piattaforme di terze parti non sono supportate:

  • Le seguenti utilità di Databricks: credenziali, libreria, flusso di lavoro del notebook e widget.
  • Streaming strutturato (incluso Hub eventi di Azure)
  • Esecuzione di codice arbitrario che non fa parte di un processo Spark nel cluster remoto.
  • API Scala, Python e R native per le operazioni su tabelle Delta (ad esempio, DeltaTable.forPath). Tuttavia, l'API SQL (spark.sql (...)) con operazioni Delta Lake e l'API Spark regolare (ad esempio, spark.read.load) sulle tabelle Delta sono entrambe supportate.

Inoltre, con Databricks Connect devi avere tutte le librerie anche nel classpath locale. Lo scenario tipico è quando tutte le dipendenze non Spark vengono impacchettate in jar-with-dependencies.