无法为 Azure Databricks 实例化 EventHubSourceProvider

Could not instantiate EventHubSourceProvider for Azure Databricks

使用 structured streaming pyspark 中记录的步骤,我无法从我设置的 Azure 事件中心在 pyspark 中创建数据框以读取流数据。

错误信息是: java.util.ServiceConfigurationError: org.apache.spark.sql.sources.DataSourceRegister: Provider org.apache.spark.sql.eventhubs.EventHubsSourceProvider 无法实例化

我已经安装了 Maven 库(com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.12 不可用)但是 none 似乎可以工作: com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.15 com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.6

ehConf['eventhubs.connectionString'] = sc._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(connectionString)一样但是返回的错误信息是:

java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init$(Lorg/apache/spark/internal/Logging;)V

连接字符串是正确的,因为它也用于写入 Azure 事件中心并且有效的控制台应用程序。

有人能给我指出正确的方向吗?使用中代码如下:

from pyspark.sql.functions import *
from pyspark.sql.types import *

# Event Hub Namespace Name
NAMESPACE_NAME = "*myEventHub*"
KEY_NAME = "*MyPolicyName*"
KEY_VALUE = "*MySharedAccessKey*"

# The connection string to your Event Hubs Namespace
connectionString = "Endpoint=sb://{0}.servicebus.windows.net/;SharedAccessKeyName={1};SharedAccessKey={2};EntityPath=ingestion".format(NAMESPACE_NAME, KEY_NAME, KEY_VALUE)

ehConf = {}
ehConf['eventhubs.connectionString'] = connectionString

# For 2.3.15 version and above, the configuration dictionary requires that connection string be encrypted.
# ehConf['eventhubs.connectionString'] = sc._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(connectionString)

df = spark \
  .readStream \
  .format("eventhubs") \
  .options(**ehConf) \
  .load()

为解决此问题,我执行了以下操作:

  1. 卸载 azure event hub 库版本
  2. 从 Maven Central 安装 com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.15 库版本
  3. 重启集群
  4. 通过问题中提供的重新运行代码验证

在 Spark 集群 运行 Spark 3.0 和 Scala 2.12

对于通过 google 找到它的任何其他人 - 检查您是否有正确的 Scala 库版本。就我而言,我的集群是带有 Scala 2.12

的 Spark v3

将我使用的教程中的库版本中的“2.11”更改为“2.12”,使其与我的集群运行时版本相匹配,解决了这个问题。

我不得不更进一步。在我必须添加的格式方法中:

.format("org.apache.spark.sql.eventhubs.EventHubsSourceProvider") 直接。

检查集群scala版本和库版本 卸载旧库并安装: com.microsoft.azure:azure-eventhubs-spark_2.12:2.3.17 在共享工作区(右键单击并安装库)以及集群中