Spark 与 ClickHouse 的 JDBC 连接给出“没有合适的驱动程序”和“NoClassDefFoundError”错误

问题描述 投票:0回答:1

我正在尝试使用 ClickHouse JDBC 驱动程序在 Spark 和 ClickHouse 之间建立 JDBC 连接。但是,我遇到了以下错误:

Py4JJavaError: An error occurred while calling o101.load.
: java.lang.NoClassDefFoundError: Could not initialize class ru.yandex.clickhouse.ClickHouseDriver

这是我正在使用的相关代码片段:

spark = SparkSession.builder \
    .appName("ClickHouse Example") \
    .master("spark://spark-master:7077") \
    .config("spark.driver.extraClassPath", "/opt/spark/jars/clickhouse-jdbc-0.4.6-all.jar") \
    .getOrCreate()

properties = {
    "url": "jdbc:clickhouse://127.0.0.1:8123/clickstream_data",
    "user": "1",
    "password": "2"
}

df = spark.read \
    .format("jdbc") \
    .option("url", properties["url"]) \
    .option("dbtable", "123") \
    .option("user", properties["user"]) \
    .option("password", properties["password"]) \
    .option("driver", "ru.yandex.clickhouse.ClickHouseDriver") \
    .load()

我已经下载了 ClickHouse JDBC 驱动程序 (clickhouse-jdbc-0.4.6-all.jar) 并将其放置在正确的目录 (/opt/spark/jars/) 中。但是,驱动程序似乎无法被识别或存在兼容性问题。

什么可能导致这些错误,以及如何解决这些错误?我需要执行任何其他步骤或配置才能在 Spark 和 ClickHouse 之间建立成功的 JDBC 连接吗?

任何帮助或指导将不胜感激。谢谢!

apache-spark pyspark jdbc clickhouse
1个回答
0
投票

ClickHouse Integration Spark 工件 jar 添加到您的启动器 jar 中。然后在使用jdbc格式之前添加以下行。

org.apache.spark.sql.jdbc.JdbcDialects.registerDialect(org.apache.spark.sql.jdbc.ClickHouseDialect)
© www.soinside.com 2019 - 2024. All rights reserved.