zoukankan      html  css  js  c++  java
  • spark sql 以JDBC为数据源

    一、环境准备:

    安装mysql后,进入mysql命令行,创建测试表、数据:

     

    将 mysql-connector-java 的jar文件拷贝到 spark_homelib下,你可以使用最新版本,下载地址:

     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 目录是不够的,下面是群里技术前辈告诉我的解决方法, 原样贴上:

     

  • 相关阅读:
    GCD
    vue中前进刷新、后退缓存方案收集
    vue cli3 项目配置
    CSS 多行省略失效 (-webkit-box-orient 失效) Second Autoprefixer control comment was ignored. Autoprefixer applies control comment to whole block, not to next rules.
    vue 设置当前页背景色
    vue history模式下的微信支付,及微信支付授权目录的填写,处理URL未注册
    h5 audio播放问题,audio获取缓存进度条
    h5页面ios键盘弹出收起后页面底部留白问题
    vue项目中引入vant 使用rem布局问题
    vue history模式下的微信分享
  • 原文地址:https://www.cnblogs.com/key1309/p/5350179.html
Copyright © 2011-2022 走看看