0
我們將構建一個實時計算系統,而且要處理的數據保存到MySQL數據庫,這裏的代碼如下:Spark Streaming:如何有效地將foreachRDD數據保存到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數據庫中。有誰能幫我一個忙嗎?
可能重複[如何使用MySQL DB和Apache Spark?](http://stackoverflow.com/questions/27718382/how-to-work-with-mysql-db-and-apache-spark) – ruhungry
我不這麼認爲,我要求的是最佳實踐,而不是如何將foreachRDD數據保存到Mysql數據庫中,但thx @ruhungry – triffic
據我所知,每個RDD都會打開一個到mySQL的連接,所以這個解決方案不是最好的做法,如果你想在未來擴大規模。 – Frankie