找不到Scala程序的MySql驱动程序

时间:2019-03-04 14:26:21

标签: scala apache-spark mysql-jdbc

我是Scala的新手,正在尝试使用Spark从mysql数据库读取。无论我做什么,我都面临着一个类未找到的异常。我尝试使用Squeryl,Scalike等在没有Spark的情况下进行连接。始终存在相同的问题。 这是我尝试过的一个示例:

logger.info("Write part")

val dataframe_mysql = spark.sqlContext
  .read.format("jdbc")
  .option("url", s"jdbc:mysql://${datamart_server}:3306/vol")
  .option("driver", "com.mysql.jdbc.Driver")
  .option("dbtable", "company")
  .option("user", datamart_user).option("password", datamart_pwd)
  .load()

dataframe_mysql.show()

我试图将驱动程序类名放在src / main / resources / application.conf中:

db.default.driver="com.mysql.jdbc.Driver"

但这没有帮助。我有:

  

java.sql.SQLException:没有合适的驱动程序

我还共享sbt文件,以显示如何添加依赖项:

name := "commercial-api-datamart-feed"
version := "0.1"
scalaVersion := "2.11.6"
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.3" % Runtime
libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.9.0"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.24" % Runtime

火花不是强制性的,但我认为它对性能更好。

2 个答案:

答案 0 :(得分:1)

您如何运行此代码?您需要将MySQL JAR传递为--jars;如果启动--jars /path/to/mysql.jarspark-shell,则类似spark-submit

如果您希望运行单个JAR,则需要确保将MySQL JAR嵌入为超级JAR的一部分。我从未使用过SBT,但您需要检查创建的最终JAR是否在其中包含MySQL类-如果没有,请使用相关的SBT标志来实现。

答案 1 :(得分:0)

您必须确保所有执行程序上都存在mysql依赖项。在我的环境中,我使用maven并在pom.xml内部指定类似的依赖项:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.42</version>
</dependency>

然后,我确保将此依赖项捆绑在我的应用程序jar中(使用maven shade插件),这样我就不必将jar放在所有执行器上。

无论您使用spark还是不访问mysql上的jdbc,都需要确保mysql-connector在您的classpath上都可用正在执行mysql条查询。