我正在尝试使用 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 连接吗?
任何帮助或指导将不胜感激。谢谢!
将 ClickHouse Integration Spark 工件 jar 添加到您的启动器 jar 中。然后在使用jdbc格式之前添加以下行。
org.apache.spark.sql.jdbc.JdbcDialects.registerDialect(org.apache.spark.sql.jdbc.ClickHouseDialect)