: java.sql.SQLException: 尝试使用 Databricks Connect 在 Databricks 集群上运行 Python 脚本时没有合适的驱动程序

Posted

技术标签:

【中文标题】: java.sql.SQLException: 尝试使用 Databricks Connect 在 Databricks 集群上运行 Python 脚本时没有合适的驱动程序【英文标题】:: java.sql.SQLException: No suitable driver when tryingt to run a Python Script on Databricks cluster using Databricks Connect 【发布时间】:2021-06-14 21:42:03 【问题描述】:

我正在尝试使用 Databricks 连接从 Databricks Cluster 上的 Visual Studio 代码运行 Python 脚本。 Apache Spark connector: SQL Server & Azure SQL 的 jar 文件已安装在 Databricks 集群上。

但是我得到了错误:

py4j.protocol.Py4JJavaError:调用 o42.save 时出错。 : java.sql.SQLException: 没有合适的驱动程序

from pyspark.sql import SparkSession, DataFrame
from db_connection import fetch_db_config
from pyspark.context import SparkContext
from pyspark import sql
from IPython.display import display



##Fetch Data from delta table into Data frame
def fetch_data_from_delta(
  spark: SparkSession, 
  sql: sql
  ): 
  global df
  df = spark.sql("select * from lending_club_acc_loans limit 10000")
  # newdf = df.repartition(8)
  return df

def load_df_to_db():
  
  jdbchostname, jdbcurl, jdbcusername, jdbcpassword, connection_properties = fetch_db_config()

  try:
    df.write \
      .format("com.microsoft.sqlserver.jdbc.spark") \
      .mode("overwrite") \
      .option("url", jdbcurl) \
      .option("dbtable", "lending_club_acc_loans") \
      .option("user", jdbcusername) \
      .option("password", jdbcpassword) \
      .option("tableLock", "true") \
      .option("batchsize", "500") \
      .option("reliabilityLevel", "BEST_EFFORT") \
      .save()

  except ValueError as error :
      print("Connector write failed", error)


def run():
  spark = SparkSession.builder.config('spark.driver.extraClassPath','dbfs:/FileStore/jars/18df20ee_ae05_45d0_ba41_89502b080b51-spark_mssql_connector_2_12_3_0_1_0_0_alpha-a6e1c.jar').getOrCreate()

  fetch_data_from_delta(spark, sql)

  load_df_to_db()


if __name__ == "__main__":
    run()

谁能帮我解决这个问题?

【问题讨论】:

Databricks 运行时版本和用于 MS SQL 的 Spark 连接器的确切版本是什么? 7.3 LTS(包括 Apache Spark 3.0.1、Scala 2.12) 你有没有为sql server添加任何jar文件?如果不是,则说明错误 什么版本的连接器? 我已经在集群上添加了jar文件。并且连接器的版本是 Spark 3.0.0 兼容连接器:com.microsoft.azure:spark-mssql-connector_2.12_3.0:1.0.0-alpha 【参考方案1】:

发现问题。问题基本上出在 .option 代码中传递的 jdbcurl 参数上。我硬编码了网址并测试了代码,它运行成功了。

【讨论】:

以上是关于: java.sql.SQLException: 尝试使用 Databricks Connect 在 Databricks 集群上运行 Python 脚本时没有合适的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Oracle DB:java.sql.SQLException:关闭连接

Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误

Java:Sqlexception:位置不支持的 SQL92 令牌:178

java.sql.SQLException:接近“on”:语法错误问题

java.sql.SQLException:架构“ROOT”不存在