我是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
火花不是强制性的,但我认为它对性能更好。
答案 0 :(得分:1)
您如何运行此代码?您需要将MySQL JAR传递为--jars
;如果启动--jars /path/to/mysql.jar
或spark-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
条查询。