zoukankan      html  css  js  c++  java
  • sparksql jdbc数据源

    用的本地模式,pom.xml中添加了mysql驱动包,mysql已经开启,写入的时候发现用format("jdbc").save()的方式发现会有does not allow create table as select的异常,于是去官方文档上发现了使用jdbc()的方式,测试

    正常,说明下Properties是java.util.Properties

    java

     1 public class Demo {
     2     private static SparkSession session = SparkSession.builder().appName("demo").master("local").getOrCreate();
     3 
     4     public static void main(String[] args) {
     5         Map<String, String> options = new HashMap<>();
     6         options.put("url", "jdbc:mysql://127.0.0.1:3306/studentmanage");
     7         options.put("driver", "com.mysql.jdbc.Driver");
     8         options.put("dbtable", "studentmanage.admin");
     9         options.put("user", "root");
    10         options.put("password", "root");
    11 
    12         // 读取
    13         Dataset<Row> dataset = session.read().format("jdbc").options(options).load();
    14         dataset.show();
    15 
    16         // 创建数据
    17         List<Row> list = new ArrayList<Row>();
    18         Row row1 = RowFactory.create("tele", "123", "male", "China", 1, "admin");
    19         Row row2 = RowFactory.create("wyc", "123", "male", "China", 1, "admin");
    20         Row row3 = RowFactory.create("xxx", "123", "male", "China", 1, "admin");
    21         list.add(row1);
    22         list.add(row2);
    23         list.add(row3);
    24 
    25         // 写入
    26         StructType schema = DataTypes
    27                 .createStructType(Arrays.asList(DataTypes.createStructField("name", DataTypes.StringType, false),
    28                         DataTypes.createStructField("pwd", DataTypes.StringType, false),
    29                         DataTypes.createStructField("sex", DataTypes.StringType, false),
    30                         DataTypes.createStructField("nation", DataTypes.StringType, false),
    31                         DataTypes.createStructField("status", DataTypes.IntegerType, false),
    32                         DataTypes.createStructField("type", DataTypes.StringType, false)));
    33 
    34         Dataset<Row> ds = session.createDataFrame(list, schema);
    35 
    36         Properties connectionProperties = new Properties();
    37         connectionProperties.put("user", "root");
    38         connectionProperties.put("password", "root");
    39 
    40         // 也可以对dataset进行遍历使用原生的jdbc或者dbutils等进行写入
    41         ds.write().mode(SaveMode.Append).jdbc("jdbc:mysql://127.0.0.1:3306/studentmanage", "admin",
    42                 connectionProperties);
    43 
    44         session.stop();
    45     }
    46 }

    scala

     1 object Demo {
     2   def main(args: Array[String]): Unit = {
     3     val session = SparkSession.builder().appName("demo").master("local").getOrCreate()
     4 
     5     val options = Map[String, String](
     6       ("url", "jdbc:mysql://127.0.0.1:3306/studentmanage"),
     7       ("driver", "com.mysql.jdbc.Driver"),
     8       ("dbtable", "studentmanage.admin"),
     9       ("user", "root"),
    10       ("password", "root"))
    11 
    12     //读取
    13     val df = session.read.options(options).format("jdbc").load()
    14 
    15     df.show()
    16 
    17     //写入
    18     val arrBuffer = Array(Row("yeye", "123", "male", "us", 1, "admin")).toBuffer
    19 
    20     val schema = DataTypes.createStructType(Array(
    21       StructField("name", DataTypes.StringType, false),
    22       StructField("pwd", DataTypes.StringType, false),
    23       StructField("sex", DataTypes.StringType, false),
    24       StructField("nation", DataTypes.StringType, false),
    25       StructField("status", DataTypes.IntegerType, false),
    26       StructField("type", DataTypes.StringType, false)))
    27 
    28     val result = session.createDataFrame(arrBuffer, schema)
    29 
    30     val properties = new Properties
    31     properties.put("user", "root")
    32     properties.put("password", "root")
    33 
    34     result.write.mode(SaveMode.Append).jdbc("jdbc:mysql://127.0.0.1:3306/studentmanage", "admin", properties)
    35 
    36     session.stop
    37   }
    38 }
  • 相关阅读:
    网易2019实习生招聘编程第3题——牛牛找工作
    Linux find、locate、whereis、which命令
    Linux 常用命令
    Java线程池
    java连接池的maxIdle该如何配置
    Idea和redis的坑
    微服务架构下分布式事务解决方案——阿里GTS
    spring管理bean的三种创建方式
    jvm内存过高及那些对象导致内存过高,那些对象不会被gc回收
    Java虚拟机 运行时数据区
  • 原文地址:https://www.cnblogs.com/tele-share/p/10400950.html
Copyright © 2011-2022 走看看