当前位置: 首页 > 知识库问答 >
问题:

无法构建scala程序“SBT Package”失败,线程“main”java.sql.sqlexeption:没有合适的驱动程序

诸葛奇玮
2023-03-14

我使用IntelliJ(sbt项目)创建了以下测试Scala程序。

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import java.sql._

object ConnTest extends App {
  val conf = new SparkConf()
  val sc = new SparkContext(conf.setAppName("Test").setMaster("local[*]"))
  val sqlContext = new org.apache.spark.sql.SQLContext(sc)
  val jdbcSqlConn = "jdbc:sqlserver://...;databaseName=...;user=...;password=...;"
  val jdbcDf = sqlContext.read.format("jdbc").options(Map(
    "url" -> jdbcSqlConn,
    "dbtable" -> "table1"
  )).load()
  jdbcDf.show(10)

  sc.stop()
}

但是,sbt package出现以下错误。我已经从微软网站下载了MS Sql server驱动程序(C:\sqljdbc_6.0\enu\jre8\sqljdbc42.jar)。如何在sbt项目中设置jar引用?

Exception in thread "main" java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(Unknown Source)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.(JDBCOptions.scala:83)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.(JDBCOptions.scala:34)
        at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32)
        at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)
        at ConnTest$.delayedEndpoint$ConnTest$1(main.scala:14)
        at ConnTest$delayedInit$body.apply(main.scala:6)
        at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
        at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.collection.immutable.List.foreach(List.scala:381)
        at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
        at scala.App$class.main(App.scala:76)
        at ConnTest$.main(main.scala:6)
        at ConnTest.main(main.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:743)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

共有1个答案

狄凯
2023-03-14

将任何外部JAR放入lib文件夹,如果不存在则创建lib(mkdir-p lib)。

build.sbt
lib/
  sqljdbc42.jar
project/
src/

另一种方法是将jar发布到您的ivy repo(~/.ivy)

然后您可以简单地转到SBT控制台并验证jar是否已加载。

 类似资料:
  • 我使用IntelliJ(sbt项目)创建了以下测试Scala程序。 但是,得到了以下错误。我已经从Microsoft网站下载了MS Sql服务器驱动程序()。如何设置sbt项目中的jar引用?

  • 我尝试使用TNS URL、用户名和密码连接到Oracle 11i数据库。JNDI正在成功查找数据源,但我无法获得连接。相反,我看到下面的堆栈跟踪。 我的Maven设置如下。 我的Spring MVC应用程序已经部署到Tomcat 8。我的oracle jar文件位于位置。如下所示 我的web.xml配置 我不确定我做错了什么。我能够使用DriverManager API成功连接。我看了下面的帖子,

  • 我正在尝试运行Selenium测试。我正在使用C#。我试过的每个司机都有问题。 看起来像是chromedriver。已找到exe,但它可以找到Chrome二进制文件。我设置了通往chrome的路径。自动搜索失败后显式执行。我甚至在最后用“chrome.exe”试过了。我总是得到同样的结果: 在以下位置找不到Chrome二进制文件: C:\用户\Vilem\AppData\本地\谷歌\Chrome\

  • 启动应用程序时,出现以下错误: 上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“Block DataController”的bean时出错:注入资源依赖项失败;嵌套异常为org.springframework.beans.factory.beanCreationException:创

  • 我正在使用JDBC接收器连接器尝试Kafka和Postgres接收器。 例外: 水槽特性: 我已经设置了< code > plugin . path =/usr/share/Java/Kafka-connect-JDBC /usr/share/java/kafka-connect-jdbc我有以下文件: , , 和其他一些基本上与汇合物一起打包的罐子。 然后我下载了 postgres-jdbc 驱

  • 当我创建kafka jdbc源连接器(debezium连接器用于带有confluent-5.4.0的oracle)时,出现错误“没有找到适合jdbc: oracle: oci…”。 我的oracle版本是企业版发布11.2.0.4.0-64位生产,我尝试了不同的驱动程序jar,但得到了相同的异常。 我的jdk版本是: 我已经将 debezium-连接器-预言机添加到文件夹融合-5.4.0/shar