2017-02-10 1 views
0

Я новичок в искры apache и хочу вставить класс модели в mysql Db, используя искру в java.Как вставить модель в mysql с искрою и java

Я пробовал использовать нижеприведенный код. но он не работает должным образом.

модель:

public class User implements Serializable{ 

private static final long serialVersionUID = 1L; 
private int id; 
private String name; 
private String email; 
private String city; 
private String country; 
private String ip; 

private static StructType structType = DataTypes.createStructType(new StructField[] { 
     DataTypes.createStructField("id", DataTypes.IntegerType, false), 
     DataTypes.createStructField("name", DataTypes.StringType, true), 
     DataTypes.createStructField("email", DataTypes.StringType, true), 
     DataTypes.createStructField("city", DataTypes.StringType, true), 
     DataTypes.createStructField("country", DataTypes.StringType, true), 
     DataTypes.createStructField("ip", DataTypes.StringType, true) 
}); 

//getters & setters 

MyApp:

public class MyApp { 

private static final String MYSQL_USERNAME = "root"; 
private static final String MYSQL_PWD = ""; 
private static final String MYSQL_CONNECTION_URL = "jdbc:mysql://localhost:3306/sample?user=" + MYSQL_USERNAME + "&password=" + MYSQL_PWD; 

private static final JavaSparkContext sc = 
     new JavaSparkContext(new SparkConf().setAppName("SparkSaveToDb").setMaster("local[*]")); 

private static final SQLContext sqlContext = new SQLContext(sc); 

public static void main(String[] args) { 
    //Sample data-frame loaded from a JSON file 
    try{ 

     List<User> list = new ArrayList<User>(); 

     User us = new User(); 
     us.setId(1); 
     us.setName("Ravi"); 
     us.setEmail("[email protected]"); 
     us.setCity("hyderabad"); 
     us.setCountry("India"); 
     us.setIp("127.0.0.1"); 
     list.add(us); 

     //Creating RDD 
     JavaRDD<User> personsRDD = sc.parallelize(list); 
     DataFrame userDf = sqlContext.createDataFrame(personsRDD, User.class); 

     //JdbcUtils.saveTable(userDf, MYSQL_CONNECTION_URL, "users", prop); 
     userDf.write().mode(SaveMode.Append).jdbc(MYSQL_CONNECTION_URL, "users", new java.util.Properties()); 

    }catch(Exception e){ 
     System.out.println(e); 
     System.exit(0); 
    } 
} 

}

Когда я запускаю приведенный выше код я получаю НИЖЕ за исключением

java.sql.SQLException: Incorrect integer value: 'hyderabad' for column 'id' at row 1** 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 

Может кто-нибудь, пожалуйста, дайте мне знать, как решить эту проблему и вставить в базу данных mysql. Заранее спасибо

ответ

0

Первый

Если таблица реализовать AUTO_INCREMENT, если ваш id так:

id int AUTO_INCREMENT 

Тогда вам не нужно установить идентификатор us.setId(1);, это может сделать проблему , подумайте, что у вас уже есть это id = 1, поэтому, когда вы положили us.setId(1);, это конфликт, поэтому не используйте us.setId(1);

Иначе вы должны сначала проверить, не существует ли этого идентификатора.

Второй

Неверное целочисленное значение: «Хайдарабад» для столбца «идентификатор» в строке 1

Эта ошибка означает, что вы установили 'hyderabad' строку в ваш идентификатор целого типа так вы делаете что-то вроде этого:

Если это ваш стол:

create table mytable(
id int, 
.... 
); 

Тогда ваши швы запроса, как это:

Insert into mytable (id, ...) values ('hyderabad', ...); 

И это не правильно, поэтому проверить вставки запроса может быть, вы просто изменили порядок ваших атрибутов.

+0

Спасибо за ответ. yes 'is' is AUTO_INCREMENT, но даже если я прокомментирую 'us.sedId (1)', я получаю ошибку ** 'java.sql.SQLException: Неверное целочисленное значение:' Hyderabad 'для столбца' id 'at строка 1 '**, а таблица - вновь созданная таблица. – user4926135

+0

@ user4926135 вы можете показать нам ваш запрос? –

+0

@ user4926135 проверить мое редактирование –

Смежные вопросы