Драйвер MySql не найден для программы Scala - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в Scala, пытаюсь использовать Spark для чтения из базы данных MySQL.Я сталкиваюсь с исключением из класса, что бы я ни делал.Я пытался подключиться без Spark, используя Squeryl, Scalike и т. Д. Всегда одна и та же проблема.Вот один пример, который я попробовал:

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 голосов
/ 04 марта 2019

Как у вас работает этот код?Вам нужно будет передать MySQL JAR как --jars;что-то вроде --jars /path/to/mysql.jar при запуске spark-shell или spark-submit.

Если вы предпочитаете запускать один JAR, вам необходимо убедиться, что MySQL JAR встроен как часть вашего Uber JAR.Я никогда не использовал SBT, но вам нужно проверить, есть ли в конечном созданном JAR классы MySQL - если нет, используйте соответствующие флаги SBT, чтобы это произошло.

0 голосов
/ 04 марта 2019

Вы должны убедиться, что зависимости mysql существуют для всех исполнителей.В моей среде я использую maven и указываю такую ​​зависимость внутри моего pom.xml:

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

. Затем я проверяю, что эта зависимость включена в jar приложения (используя плагин maven shade), поэтомучто мне не нужно ставить банку на всех исполнителей.

Независимо от того, используете ли вы spark или нет для доступа к mysql через jdbc, вам нужно убедиться, что mysql-connectorдоступно на вашем classpath, где бы вы ни выполняли mysql запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...