mysql - 使用Scala和spark从mysql中提取数据

标签 mysql scala apache-spark

我尝试运行 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

异常(exception):

Exception in thread "main" java.sql.SQLException: Column 'id' not found."**

最佳答案

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

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

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

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

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

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

关于mysql - 使用Scala和spark从mysql中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47397966/

相关文章:

mysql - 我怎样才能让 mysql_result() 工作

mysql - 更正公式的 SQL 脚本

php - 为网站用户添加 facebook/twitter 登录选项

json - 如何将 json 中的顶级数组与 specs2 匹配

apache-spark - Spark DataFrame RangePartitioner

apache-spark - 为什么Spark shuffle要将中间数据存储在磁盘上?

mysql - 根据其他列的顺序从组中选择一个值

具有椭圆积分和贝塞尔函数的 Java/Scala 数学库?

forms - 为什么找不到Scala表单的值?

scala - 使用 Spark 和 IntelliJ 时出现 NoSuchMethodError