2017-11-20 4 views
0

mysql retail_db 데이터베이스에서 데이터를 추출하기 위해 Scala 프로그램을 실행하려고했습니다. SQLException를 throw합니다. 제출 명령Scala와 spark를 사용하여 mysql에서 데이터를 추출하십시오.

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-submit --class "Orders" \ 
--master local <path>/scala_2.10-0.1-SNAPSHOT.jar 

예외 : 스레드에서

예외 "주"java.sql의

내 코드입니다 .에스 QLException : 열 '아이디'하지 발견 "**

+0

코드에 문제가없는 것 같습니다. 나는'id' 컬럼이 카테고리의 일부가 아니라고 생각한다. –

답변

1

(또는이 지능 아닌) 당신이 카테고리 테이블의 열라는 이름의 ID가없는 매우 간단합니다.. 난 당신이 실제 필드 이름과 유형을 볼 것입니다이 방법이있는 테이블의 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라는 것을 알 수 있습니다.

관련 문제