spark sql 以JDBC為數據源


一、環境准備:

安裝mysql后,進入mysql命令行,創建測試表、數據:

 

將 mysql-connector-java 的jar文件拷貝到 \spark_home\lib\下,你可以使用最新版本,下載地址:

 http://dev.mysql.com/downloads/connector/j/

 

二、實現代碼

1、准備工作:

         SparkConf conf =  new  SparkConf().setAppName( " JDBCDataSource "); // .setMaster("local");  
        JavaSparkContext sc =  new JavaSparkContext(conf);
        SQLContext sqlContext =  new SQLContext(sc);

 

2、從JDBC數據讀取:

         Map<String, String> options =  new  HashMap<String, String>();

options.put("url", "jdbc:mysql://spark1:3306/testdb");
        

//讀取第一個表

options.put("dbtable", "student_infos");

DataFrame studentInfosDF = sqlContext.read().format("jdbc")
                .options(options).load();

 

//讀取第二個表

options.put("dbtable", "student_scores");

 

DataFrame studentScoresDF = 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 目錄是不夠的,下面是群里技術前輩告訴我的解決方法, 原樣貼上:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM