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