一、環境准備:
安裝mysql后,進入mysql命令行,創建測試表、數據:
將 mysql-connector-java 的jar文件拷貝到 \spark_home\lib\下,你可以使用最新版本,下載地址:
http://dev.mysql.com/downloads/connector/j/
二、實現代碼
1、准備工作:
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc);
2、從JDBC數據讀取:
options.put("url", "jdbc:mysql://spark1:3306/testdb");
//讀取第一個表
options.put("dbtable", "student_infos");
DataFrame studentInfosDF = sqlContext.read().format("jdbc")
.options(options).load();
//讀取第二個表
3、 寫入數據到JDBC
studentsDF.javaRDD().foreach( new VoidFunction<Row>() {
privatestaticfinallong serialVersionUID = 1L;
public void call(Row row) throws Exception {
// TODO Auto-generated method stub
String sql = "insert into good_student_infos values("
+ "'" + String.valueOf(row.getString(0)) + "',"
+ Integer.valueOf(String.valueOf(row.get(1))) + ","
+ Integer.valueOf(String.valueOf(row.get(2))) + ")";
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
Statement stmt = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://spark1:3306/testdb", "", ""); //可能有重復創建conn的問題,此處不做討論
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(stmt != null) {
stmt.close();
}
if(conn != null) {
conn.close();
}
}
}
});
三、bug解決
寫本片文章的目的就是要記錄這個錯誤,按照以上的方式實現,仍然會有報錯,錯誤信息:"No suitable driver found for jdbc:mysql://spark1:3306/testdb",問題在於,僅僅將mysql-connector-java 的jar文件放到/spark_home/lib 目錄是不夠的,下面是群里技術前輩告訴我的解決方法, 原樣貼上: