我们将建立一个实时计算系统,也想将处理后的数据保存到Mysql数据库中,下面是下面的代码:
splitWordInfo.foreachRDD(new Function<JavaRDD<String>, Void>() {
private static final long serialVersionUID = 1L;
@Override
public Void call(JavaRDD<String> rdd) throws Exception {
rdd.foreachPartition(new VoidFunction<Iterator<String>>() {
// Default Serial ID
private static final long serialVersionUID = 1L;
@Override
public void call(Iterator<String> eachline) throws Exception {
String sql = "insert into test_mm(name,addr) values(?)";
Connection conn = DriverManager.getConnection("jdbc:mysql://xx.xx.xx.xx:3306/dbname", "user", "pass");
PreparedStatement stat = conn.prepareStatement(sql);
while(eachline.hasNext()){
stat.setString(1, eachline.next());
stat.executeUpdate();
}
stat.close();
conn.close();
}
});
return null;
}
});
是否会为每个rdd或每个分区打开/关闭mysql连接?
以及如何有效地将foreachRDD数据保存到Mysql数据库中。有人能帮我一个忙吗?
每个RDD分区就像一个单独的任务,您的程序将为每个分区获得连接。最好使用Hikari或Tomcat之类的连接池库。但是,即使有了连接池,与数据库的通信也要付出一定的代价。在这种模式下您无法避免。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句