2016-11-16 1 views
0

나는이 dB 나는 다음과 같은 경우 클래스 구조가 여러 행 보유 스파크 dataframe 저장하기 위해 노력하고있어스파크 dataframe 자동 증가 열이 SQL 테이블에 저장

+----------------+------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+----------------+------------+------+-----+---------+----------------+ 
| id    | bigint(20) | NO | PRI | NULL | auto_increment | 
| VERSION  | bigint(20) | NO |  | NULL |    | 
| user_id  | bigint(20) | NO | MUL | NULL |    | 
| measurement_id | bigint(20) | NO | MUL | NULL |    | 
| day   | timestamp | NO |  | NULL |    | 
| hour   | tinyint(4) | NO |  | NULL |    | 
| hour_timestamp | timestamp | NO |  | NULL |    | 
| value   | bigint(20) | NO |  | NULL |    | 
+----------------+------------+------+-----+---------+----------------+ 

에 다음과 같은 테이블 :

dataFrame.insertIntoJDBC(...) 

내가 얻을 : 내가 사용 JDBC 드라이버를 통해 내 SQL에 dataframe을 저장하기 위해 노력하고있어
case class Record(val id : Int, 
        val VERSION : Int, 
        val user_id : Int, 
        val measurement_id : Int, 
        val day : Timestamp, 
        val hour : Int, 
        val hour_timestamp : Timestamp, 
        val value : Long ) 

기본 키 위반 오류가 :

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY' 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 

나는 모든 행의 기본 값으로 ID = 0을 설정하려고하지 않으며 또한 케이스 클래스에서 id 필드를 제거하려하지도했다.

아무도 도와 줄 수 있습니까?

덕분에, 토 메르

+0

첫 번째 레코드가 유일한 복제본입니까? –

답변

3

가 발견. 나는 SQL < -> 자바 열 유형 문제가 있었다. 에 따라 : https://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/jdbc/getstart/mapping.doc.html

bigint sql 열은 Java에서 Long으로 표시되어야합니다.

case class Record(val id: Long, 
        val VERSION : Long, 
        val user_id : Long, 
        val measurement_id : Long, 
        val day : Timestamp, 
        val hour : Int, 
        val hour_timestamp : Timestamp, 
        val value : Long ) 

그리고 그것은 근무 dataframe의 모든 레코드에 대한 ID = 0을 설정 : 나는 내 경우 클래스를 변경 한 후 . 감사합니다.