You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法创建ConnectionString连接Azure Event Hub:JavaPackage不可调用错误

问题分析

报错TypeError: 'JavaPackage' object is not callable的核心原因是Spark无法找到org.apache.spark.eventhubs.EventHubsUtils这个Java类,常见触发场景包括:

  • 集群未安装Azure Event Hubs Spark连接器依赖
  • 类路径引用错误(不同版本的连接器类路径存在差异)
  • 调用JVM类时使用了错误的Spark上下文引用
解决方案

1. 安装Event Hubs Spark连接器依赖

在Databricks集群的「库」页面,添加对应Spark版本的Maven库:

  • Spark 3.x环境推荐使用坐标:com.microsoft.azure:azure-eventhubs-spark_2.12:2.3.22(版本号可根据官方最新稳定版调整)

2. 修正连接字符串加密代码

方式一:修复类调用路径与上下文引用

把原代码中的加密调用:

writeConnectionString = sparkContext._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(connectionString)

替换为:

# 若仍报错,可尝试类路径改为com.microsoft.azure.eventhubs.spark.EventHubsUtils
writeConnectionString = spark._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(connectionString)

说明:使用spark(SparkSession实例)而非sparkContext获取JVM对象,部分环境中sparkContext的JVM引用无法正确加载目标类。

方式二:用Databricks Secrets管理连接字符串(更安全)

无需手动加密,直接通过Databricks Secrets安全存储并读取连接字符串:

  1. 在Databricks工作区创建Secret Scope,存储Event Hub连接字符串(密钥名例如eventhubs-connection-string)
  2. 代码中直接调用:
connectionString = dbutils.secrets.get(scope="你的Secret Scope名称", key="eventhubs-connection-string")
ehWriteConf = {
  'eventhubs.connectionString': connectionString
}

Databricks会自动处理连接字符串的安全传递,省去手动加密步骤。

3. 补充完整流式写入逻辑

原代码缺少最终的Event Hub写入代码,补充如下:

streamingDelays.writeStream \
  .format("eventhubs") \
  .options(**ehWriteConf) \
  .option("checkpointLocation", "/dbfs/mnt/你的检查点路径")  # 替换为DBFS上的有效路径
  .start() \
  .awaitTermination()

注意:检查点路径必须是DBFS上的合法路径,不能使用///checkpoint这类无效路径。

内容的提问来源于stack exchange,提问作者Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:23:15