Databricks Connect con Azure Event Hubs
Tengo problemas al intentar ejecutar código Python en Databricks usando databricks-connecty dependiendo de una extensión instalada de Maven (en este caso, se com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17encuentra en la documentación oficial de Databricks para la integración con Azure EventHub
En cuanto a la conexión con databricks-connect, todo está bien configurado (obtuvo "Todas las pruebas pasadas" con databricks-connect test). El paquete Maven com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.17parece estar "instalado" en la sección Bibliotecas de mi clúster).
El código defectuoso es este simple trazador de líneas:
encrypted_string = sc._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(to_be_encrypted_string)
Produciendo la siguiente pila de errores:
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
¿Me estoy perdiendo algo obvio aquí sobre la instalación del paquete Maven? ¿Hay algún paso adicional para usarlo con Python? Gracias por tu ayuda !
Respuestas
La funcionalidad tiene algunas limitaciones :
Las siguientes funciones de Databricks y plataformas de terceros no son compatibles:
- Las siguientes utilidades de Databricks: credenciales, biblioteca, flujo de trabajo del cuaderno y widgets.
- Streaming estructurado (incluido Azure Event Hubs)
- Ejecutar código arbitrario que no forma parte de un trabajo de Spark en el clúster remoto.
- API nativas de Scala, Python y R para operaciones de tabla Delta (por ejemplo, DeltaTable.forPath). Sin embargo, la API de SQL (spark.sql (...)) con operaciones de Delta Lake y la API de Spark normal (por ejemplo, spark.read.load) en tablas Delta son compatibles.
Además, con Databricks Connect también debe tener todas las bibliotecas en el classpath local. El escenario típico es cuando todas las dependencias que no son de Spark se empaquetan en jar-with-dependencies.