猿问

Python:JayDeBeApi 与 Apache Drill 的 JDBC 连接错误错误

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


我已经通过 开启了嵌入模式下的钻取drill-embedded,并且 Web ui 在端口 8047 中正确运行。然后,我尝试通过 python 脚本通过 JDBC 进行连接:


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'

)

但我收到这个错误


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.

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


侃侃无极
浏览 82回答 1
1回答

沧海一幻觉

因为drill-embedded没有端口可供选择。下面是完整的查询示例import jaydebeapiimport jpypeimport osimport pandas as pdDRILL_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(&nbsp; &nbsp; 'org.apache.drill.jdbc.Driver',&nbsp; &nbsp; 'jdbc:drill:drillbit=localhost')cursor = conn.cursor()query = """&nbsp; &nbsp; SELECT *&nbsp; &nbsp; FROM dfs.`/Users/user/data.parquet`&nbsp; &nbsp; LIMIT 1"""cursor.execute(query)columns = [c[0] for c in cursor.description]data = cursor.fetchall()df = pd.DataFrame(data, columns=columns)df.head()
随时随地看视频慕课网APP

相关分类

Python
我要回答