WedX - журнал о программировании и компьютерных науках

Jar соединителя Spark MySql

Я подключаюсь к базе данных MySql из искрового приложения (spark-2.0.0-bin-hadoop2.7). При подключении получаю ошибку ниже.

Вот мой код:

def main(args: Array[String]) {

    val conf = new SparkConf()
    .setAppName("LoadMySql")
    .setMaster("local[*]")
    .set("spark.sql.warehouse.dir", "file:///C:/temp")

    val spark = SparkSession
    .builder
    .config(conf)
    .getOrCreate()

    val option = Map("url" -> "jdbc://mysql://IPAddress:3306/TestDB", "dbtable" -> "Users", "user" -> "root", "password" -> "*****")

    val dataRDD = spark.sqlContext.read.format("org.apache.spark.sql.jdbc").options(option).load()

Ошибка:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
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.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:53)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:123)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:117)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:53)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:315)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:122)
    at com.Lab.SparkAPI.LoadMySql$.main(LoadMySql.scala:26)
    at com.Lab.SparkAPI.LoadMySql.main(LoadMySql.scala)

Я уже включил mysql-connector-java-5.1.27-bin.jar в свой проект eclipse через Add External Jars.

Я пробовал пару разных версий jar, но пока не повезло.

Любая идея, какая версия мне нужна для подключения к MySQL?


[редактировать]

Наконец-то я могу подключиться и загрузить данные из MySQL...

Я сделал ниже 2 настройки ...

  • GRANT ALL ON DBName.* TO "root"@'%' IDENTIFIED BY 'password';
  • измените /etc/mysql/mysql.conf.d/mysqld.cnf, чтобы прокомментировать #bind-address = 127.0.0.1 в разделе [mysqld]

Ответ на этот вопрос был дан здесь

25.09.2018

  • Не могли бы вы попробовать загрузить класс драйвера MySql непосредственно перед вызовом DriverManager.getConnection 25.09.2018

Ответы:


1

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

  1. Импортируйте MySQL в свой проект

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.39</version>
    </dependency>
    
  2. Создайте объект Properties, указав драйвер jdbc. Затем используйте этот объект для записи/чтения в/из MySQL.

    val prop = new Properties()
    
    prop.setProperty("user", dbUser)
    prop.setProperty("password", dbPassword)
    prop.put("driver", "com.mysql.jdbc.Driver");
    
    df.write.mode("append").jdbc("jdbc:mysql://" + dbHost + "/" + dbName + "?rewriteBatchedStatements=true", "TABLE_NAME", prop)
    

Надеюсь, поможет.

25.09.2018
  • Пожалуйста, не публикуйте здесь такой длинный пример кода в комментарии. Было бы лучше, если бы вы обновили свой вопрос :) В любом случае, мой подход сработал для вас? 25.09.2018
  • Я включил файл jar в свой проект, этого недостаточно? Или мне нужно импортировать его так, как вы упомянули. 25.09.2018
  • Импортировать библиотеки вручную в проект Scala не рекомендуется, для этой цели лучше использовать такие инструменты, как Maven или SBT. В любом случае убедитесь, что библиотека правильно импортирована в проект. 25.09.2018
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]