首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: JayDeBeApi的JDBC连接错误到Apache Drill错误

Python: JayDeBeApi的JDBC连接错误到Apache Drill错误
EN

Stack Overflow用户
提问于 2020-10-05 23:42:39
回答 1查看 317关注 0票数 0

我正在尝试使用jaydebeapi库从python连接到Apache Drill。

我已经通过drill-embedded在嵌入式模式下打开了drill,web在端口8047上运行正常。然后,我尝试通过python脚本通过JDBC进行连接:

代码语言:javascript
复制
import jaydebeapi
import jpype
import os

DRILL_HOME = os.environ["DRILL_HOME"]

classpath = DRILL_HOME + "/jars/jdbc-driver/drill-jdbc-all-1.17.0.jar"
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath)
conn = jaydebeapi.connect(
    'org.apache.drill.jdbc.Driver',
    'jdbc:drill:drillbit=localhost:8047'
)

但是我得到了这个错误

代码语言:javascript
复制
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Traceback (most recent call last):
  File "jaydebe_drill.py", line 10, in <module>
    'jdbc:drill:drillbit=localhost:8047'
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py", line 412, 
in connect
    jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/jaydebeapi/__init__.py", line 230,
 in _jdbc_connect_jpype
    return jpype.java.sql.DriverManager.getConnection(url, *dargs)
jpype._jexception.SQLNonTransientConnectionExceptionPyRaisable: 
java.sql.SQLNonTransientConnectionException: 
Failure in connecting to Drill: oadd.org.apache.drill.exec.rpc.ChannelClosedException: 
Channel closed /127.0.0.1:62244 <--> localhost/127.0.0.1:8047.

有人知道如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 16:43:18

感谢@Luke Woodward的建议,问题出在端口上。对于drill-embedded,没有端口可供选择。下面是一个完整的查询示例

代码语言:javascript
复制
import jaydebeapi
import jpype
import os
import pandas as pd

DRILL_HOME = os.environ["DRILL_HOME"]
classpath = DRILL_HOME + "/jars/jdbc-driver/drill-jdbc-all-1.17.0.jar"

jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath)

conn = jaydebeapi.connect(
    'org.apache.drill.jdbc.Driver',
    'jdbc:drill:drillbit=localhost'
)

cursor = conn.cursor()

query = """
    SELECT *
    FROM dfs.`/Users/user/data.parquet`
    LIMIT 1
"""

cursor.execute(query)
columns = [c[0] for c in cursor.description]
data = cursor.fetchall()
df = pd.DataFrame(data, columns=columns)

df.head()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64211911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档