2017-11-20 19 views
0

mysql retail_dbデータベースからデータを抽出するためにScalaプログラムを実行しようとしました。 SQLExceptionをスローします。Scalaを使用してmysqlからデータを抽出し、sparkを

は、これは私のコードです:

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

が例外:スレッド "メイン" java.sqlの

例外

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) 
    } 
    } 
} 

スパークは、コマンドを送信します.S QLException:列「ID」ではない た「**

+0

コードに間違いはありません。私は 'id'列はカテゴリの一部ではないと思います。 –

答えて

1

あなたがカテゴリテーブルにIDという名前の列を持っていない(または、それがintではありません)非常に簡単です。私はあなたが実際のフィールド名とタイプを見ることがこの方法を使用して、テーブルのdescriptionを返し、その後

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

れる最初の

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

を実行することをお勧めします。 もちろん、これはあなたがMySQLのホストにアクセスできないと仮定します。そうしないと を手動で接続してテーブル構造を参照するだけです。

EDIT: JDBC URLはよく知られているようですが、clouderaのクイックスタートVMです。とにかくテーブルのスキーマはhereなので、idではなくcategory_idであることが分かります。

関連する問題