gpt4 book ai didi

java - 如何使用spark和java在mysql中插入模型

转载 作者:行者123 更新时间:2023-11-29 19:25:55 25 4
gpt4 key购买 nike

我是 apache Spark 的新手,我想使用 java 中的 Spark 将模型类插入到 mysql Db 中。

我尝试使用下面的代码。但它无法正常工作。

型号:

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

我的应用程序:

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("abc.xyz0@gmail.com");
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 数据库中。提前致谢

最佳答案

第一

如果您的表实现 AUTO_INCRMENT 如果您的 id 如下所示:

id int AUTO_INCREMENT

那么你不需要设置 id us.setId(1);,这可能会产生问题,考虑你已经使用了这个 id = 1 code> 所以当你输入 us.setId(1); 这是一个冲突,所以不要使用 us.setId(1);

否则您应该首先检查该 id 是否不存在。

第二

Incorrect integer value: 'hyderabad' for column 'id' at row 1

此错误意味着您将 'hyderabad' 字符串设置为整数类型的 id,因此您正在制作如下内容:

如果这是您的 table :

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

然后你的查询接缝如下:

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

这不正确,因此请检查您的插入查询,也许您只是更改了属性的顺序。

关于java - 如何使用spark和java在mysql中插入模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com