python - 使用 Anaconda 和 Python 3.8 64 位连接到数据库 Hive 时找不到 Java 类 HiveDriver
问题描述
在过去的几天里,我遇到了一个我无法解释的问题。我在 Windows 10、Anaconda 64 位、Jupyter 64 位、Python 64 位等...我是初学者,我需要帮助。非常感谢您的帮助,非常感谢。我在 anaconda jupyter notebook 下开发,我有一个使用 jdbc 连接到 Hive 数据库的 python 脚本。我添加了一个 jar 文件,其中包含一个 java 类 org.apache.hive.jdbc.HiveDriver。当我运行脚本时,出现以下错误:
类型错误:找不到类 org.apache.hive.jdbc.HiveDriver
这是我的python代码
import jaydebeapi
driver = "org.apache.hive.jdbc.HiveDriver"
url = "jdbc:hive2://ip-172-31-3-208.eu-west-1.compute.internal:11000/default;principal=indexima/ip-172-31-3-208.eu-west-1.compute.internal@INDEXIMA.COM;"
hivejar = "C:/user/xxx/Documents/Python/hive-jdbc-3.1.2.jar"
#create connection and cursor
connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)
cursor = connection.cursor()
输出是:
TypeError Traceback (most recent call last)
<ipython-input-15-3a47c2c3c553> in <module>
11
12 # create connection and cursor
---> 13 connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)
14 cursor = connection.cursor()
15
C:\ProgramData\Anaconda3\lib\site-packages\jaydebeapi\__init__.py in connect(jclassname, url, driver_args, jars, libs)
410 else:
411 libs = []
--> 412 jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
413 return Connection(jconn, _converters)
414
C:\ProgramData\Anaconda3\lib\site-packages\jaydebeapi\__init__.py in _jdbc_connect_jpype(jclassname, url, driver_args, jars, libs)
219 return jpype.JArray(jpype.JByte, 1)(data)
220 # register driver for DriverManager
--> 221 jpype.JClass(jclassname)
222 if isinstance(driver_args, dict):
223 Properties = jpype.java.util.Properties
C:\ProgramData\Anaconda3\lib\site-packages\jpype\_jclass.py in __new__(cls, jc, loader, initialize)
97
98 # Pass to class factory to create the type
---> 99 return _jpype._getClass(jc)
100
101
**TypeError: Class org.apache.hive.jdbc.HiveDriver is not found**
jar 文件当然包含 java 类 HiveDriver。我更改了罐子的名称并替换为任何名称,我得到了相同的诊断。就好像 Jupyter 将寻找其他地方一样。谢谢你的帮助。
解决方案
您在此处使用的参数中有一个小错误配置:
connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)
URL 不应该放在[ ]
数组中 - 只有用户 ID 和密码字符串。
改用这个:
connection = jaydebeapi.connect(driver, url, ['', ''], hivejar)
更多示例在官方文档中。
推荐阅读
- java - 列表升序和降序排序的规则是怎样的?
- r - 在 R 中使用 ggplot2 控制两个变量的双 geom_ribbon 的颜色
- c++ - C++17如何测试类有成员变量?
- java - 试图编写一个 Junit 测试,但它失败了
- three.js - 修改 Three.js 中的顶点后如何导出网格?
- html - CSS 图像尺寸不正确
- tinymce - 将“上传”选项卡设为“插入/编辑图像”对话框中的默认选项
- mysql - 本地 mysql 仅在 Windows 上连接 ECONNREFUSED
- wordpress - 如何让嵌套的 Gutenberg 块进行解析
- android - 反应原生,在水平滑动时导航屏幕