簡體   English   中英

無法為 Azure Databricks 實例化 EventHubSourceProvider

[英]Could not instantiate EventHubSourceProvider for Azure Databricks

使用結構化流式傳輸 pyspark中記錄的步驟,我無法從我已設置的 Azure 事件中心在pyspark中創建 dataframe 以讀取 stream 數據。

錯誤信息是: java.util.ServiceConfigurationError: org.apache.spark.sql.sources.DataSourceRegister: Provider org.apache.spark.sql.eventhubs.EventHubsSourceiProvider 無法被instanthubs.EventHubsSourceiProvider

我已經安裝了 Maven 庫(com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.12 不可用),但似乎都不起作用: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 事件中心庫版本
  2. 從 Maven Central 安裝 com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.15 庫版本
  3. 重啟集群
  4. 通過重新運行問題中提供的代碼進行驗證

在運行 Spark 3.0 和 Z3012DCFF14577C9FEABB87 的 Spark 集群上安裝版本號為 com.microsoft.azure:azure-eventhubs-spark_2.11:2.3.* 的庫時,我收到了同樣的錯誤。

對於通過谷歌找到這個的其他人 - 檢查您是否擁有正確的 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 在共享工作區(右鍵單擊並安裝庫)以及集群中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM