在Databricks on Apache Spark中读取Azure Event Hub流数据时遇AttributeError: 'str' object has no attribute '_jvm'错误求解决方案
解决AttributeError: 'str' object has no attribute '_jvm' 问题
这个错误我之前处理过,原因其实一眼就能看出来——你把sparkContext赋值成了空字符串"",这哪是Spark的上下文对象啊!字符串当然没有_jvm这个属性,所以调用sparkContext._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt()的时候就炸了。
正确的修复步骤:
在Databricks环境中,spark对象是默认初始化好的SparkSession实例,你只需要从它里面获取真正的SparkContext就行:
# 不要把sparkContext赋值为空字符串! sparkContext = spark.sparkContext # 这才是正确的Spark上下文对象 connectionString = 'Endpoint=sb://namespace.servicebus.windows.net/;SharedAccessKeyName=both4;SharedAccessKey=adfdMyKeyIGBKYBs=;EntityPath=hubv5' ehConf = {} # 现在可以正常调用加密方法了 ehConf['eventhubs.connectionString'] = sparkContext._jvm.org.apache.spark.eventhubs.EventHubsUtils.encrypt(connectionString) streaming_df = spark \ .readStream \ .format("eventhubs") \ .options(**ehConf) \ .load()
额外注意事项:
- 确保你的Databricks集群已经安装了Azure Event Hubs的Spark连接器依赖,通常可以通过集群的"库"页面添加Maven坐标:
com.microsoft.azure:azure-eventhubs-spark_2.12:2.3.22(版本可以根据你的Spark版本调整) - 如果你不想用加密的连接字符串,也可以直接把原始连接字符串放到
ehConf里,但生产环境更推荐加密方式
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

