【问题标题】:Extract data from mysql using Scala and spark使用 Scala 和 spark 从 mysql 中提取数据
【发布时间】:2018-05-04 00:33:54
【问题描述】:

我尝试运行 Scala 程序从 mysql Retail_db 数据库中提取数据。它抛出 SQLException。

这是我的代码:

import java.sql.DriverManager
import java.sql.Connection

case class Categories(id: Int, department: String, name: String){
  override def toString: String = {"id: " + id + "department: " + department + "name: " + name}
}
object Orders {
  def main(args: Array[String]): Unit ={
    val driver = "com.mysql.jdbc.Driver"
    val url = "jdbc:mysql://quickstart.cloudera:3306/retail_db"
    val username = "root"
    val password = "cloudera"
    Class.forName(driver)
    val connection = DriverManager.getConnection(url, username, password)
    val statement = connection.createStatement()
    val resultSet = statement.executeQuery(s"SELECT * FROM categories")

    while (resultSet.next()){
      val e = Categories(resultSet.getInt("id"),
        resultSet.getString("department"),
        resultSet.getString("name"))
         println(e)
    }
  }
}

Spark 提交命令:

spark-submit --class "Orders" \
--master local < path >/scala_2.10-0.1-SNAPSHOT.jar

例外:

线程“主”java.sql.SQLException 中的异常:列 'id' 不是 找到了。”**

【问题讨论】:

  • 我看不出代码有什么问题。我认为id 列不属于类别。

标签: mysql scala apache-spark


【解决方案1】:

很简单,您在类别表中没有名为 id 的列(或者它不是 Int)。我建议运行

val resultSet = statement.executeQuery("SHOW COLUMNS FROM categories")

首先将返回您的表的description,然后

   while (resultSet.next()){
           println(resultSet.getString("Field"))
           println(resultSet.getString("Type"))
    }

通过这种方式,您将看到实际的字段名称和类型。 当然,这假设您无权访问 MySQL 的主机,否则 您应该简单地手动连接并查看表结构。

编辑: JDBC URL 看起来很熟悉,它来自 cloudera 的快速启动 VM。无论如何,表的模式是here,所以你可以看到它不是 id 而是 category_id。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2020-09-14
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2019-12-24
    相关资源
    最近更新 更多