gpt4 book ai didi

mysql - 将 java 类添加到 sbt 程序集

转载 作者:行者123 更新时间:2023-11-30 22:33:18 25 4
gpt4 key购买 nike

我在使用 scala 构建 spark jar 时遇到问题。这是一件非常简单的事情,我想通过 JDBC 以编程方式访问 mysql 服务器并将其加载到 spark 数据帧中。我可以让它在 spark shell 中工作,但我无法打包一个与 spark submit 一起工作的 jar。它会打包,但在运行时,失败并显示

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3310/100million

我的 spark-submit 命令是

./bin/spark-submit ~/path/to/scala/project/target/scala-2.10/complete.jar --driver-class-path ~/path/to/mysql-connector-java -5.1.37-bin.jar

我的 build.sbt 看起来像

name := "sql_querier"

version := "1.0"

scalaVersion := "2.10.4"

sbtVersion := "0.13.7"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.1" % "provided"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.5.1" % "provided"

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.37"

assemblyJarName in assembly := "complete.jar"

mainClass in assembly := Some("sql_querier")

offline := true

我的代码非常简单

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext

object sql_querier{

def main(args: Array[String]) {

val sc = new org.apache.spark.SparkContext()
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val url="jdbc:mysql://databaseurl:portno/database"

val prop = new java.util.Properties
prop.setProperty("user","myuser")
prop.setProperty("password","mydatabase")
val cats=sqlContext.read.jdbc(url, "categories", prop)
cats.show
}
}

我在其中隐藏了用户密码和数据库 URL 的实际值。我在项目中也有一个文件,它添加了 sbt assembly 插件,但这没有任何问题。当使用指向 mysql jar 的 --driver-class-path 选项启动 spark shell 时,我可以运行命令并从 mysql 数据库中提取数据。

如果能提供我在构建过程中做错了什么的任何线索,我们将不胜感激。

院长

编辑:尝试了一大堆东西,包括不同版本的 jdbc 驱动程序和添加行

sc.addJar("/Users/dean.wood/data_science/scala/sqlconn/mysql-connector-java-5.0.8-bin.jar")
Class.forName("com.mysql.jdbc.Driver")

到scala文件和行

assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs@_*) =>
xs.map(_.toLowerCase) match {
case ("manifest.mf" :: Nil) |
("index.list" :: Nil) |
("dependencies" :: Nil) |
("license" :: Nil) |
("notice" :: Nil) => MergeStrategy.discard
case _ => MergeStrategy.first // was 'discard' previousely
}
case "reference.conf" => MergeStrategy.concat
case _ => MergeStrategy.first
}

到构建文件。

似乎没有任何帮助。

最佳答案

解决了。我在构建文件或 scala 文件中没有做错任何事。

事实证明,如果 spark-submit 出现在可执行文件的路径之前,它只会查看 --driver-class-path。所以为了让它工作,我使用了上面的 spark-submit 命令,而不是:

./bin/spark-submit --driver-class-path ~/path/to/mysql-connector-java-5.1.37-bin.jar ~/path/to/scala/project/target/scala-2.10/complete.jar 

我怀疑要将其扩展到集群,我必须将 mysql 连接器添加到每个 worker,但那是以后的事了。

关于mysql - 将 java 类添加到 sbt 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com