作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们要构建一个实时计算系统,还想将处理后的数据保存到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 这样的连接池库是很好的。但即使使用连接池,与数据库的通信也会产生成本。在这个模型中你无法避免这一点。
关于java - Spark 流: How to efficiently save foreachRDD data into Mysql Database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39613776/
我是一名优秀的程序员,十分优秀!