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

问题描述

我正在尝试使用auto insert(unique_ptr<Node> old_tree,int new_value) { return make_unique<Node>(new_value,std::move(old_tree),nullptr); } 库从python连接到Apache Drill。

我已经通过jaydebeapi以嵌入式模式打开了钻取,并且Web ui在端口8047上正确运行。然后,我试图通过python脚本通过JDBC连接:

drill-embedded

但是我得到这个错误

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'
)

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

解决方法

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

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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...