pyspark 连接到ClickHouse的Spark JDBC出现“No suitable driver”和“NoClassDefFoundError”错误

hgb9j2n6  于 2024-01-06  发布在  Spark
关注(0)|答案(1)|浏览(249)

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

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

字符串
下面是我使用的相关代码片段:

  1. spark = SparkSession.builder \
  2. .appName("ClickHouse Example") \
  3. .master("spark://spark-master:7077") \
  4. .config("spark.driver.extraClassPath", "/opt/spark/jars/clickhouse-jdbc-0.4.6-all.jar") \
  5. .getOrCreate()
  6. properties = {
  7. "url": "jdbc:clickhouse://127.0.0.1:8123/clickstream_data",
  8. "user": "1",
  9. "password": "2"
  10. }
  11. df = spark.read \
  12. .format("jdbc") \
  13. .option("url", properties["url"]) \
  14. .option("dbtable", "123") \
  15. .option("user", properties["user"]) \
  16. .option("password", properties["password"]) \
  17. .option("driver", "ru.yandex.clickhouse.ClickHouseDriver") \
  18. .load()


我已经下载了ClickHouse JDBC驱动程序(clickhouse-jdbc-0.4.6-all.jar)并将其放置在正确的目录(/opt/spark/jars/)中。但是,似乎驱动程序无法识别或存在兼容性问题。
是什么导致了这些错误,我该如何解决它们?为了在Spark和ClickHouse之间建立成功的JDBC连接,我需要执行哪些额外的步骤或配置吗?
任何帮助或指导将不胜感激。谢谢!

3j86kqsm

3j86kqsm1#

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

  1. org.apache.spark.sql.jdbc.JdbcDialects.registerDialect(org.apache.spark.sql.jdbc.ClickHouseDialect)

字符串

相关问题