Spark与MySQL连接

本文介绍了如何使用Spark连接MySQL,包括将数据保存到MySQL的多种方法,优化的foreachPartition策略,以及避免从MySQL读取数据时的常见误区,强调了连接对象的创建和管理对性能的影响,并提出了使用连接池来提升效率。
摘要由CSDN通过智能技术生成

将数据保存到MySQL

方法一:各个字段都是提前定好的

val prop = new java.util.Properties
prop.setProperty("user", "root")
prop.setProperty("password", "123456")

df.write.mode(SaveMode.Append).jdbc("jdbc:mysql://localhost:3306/test", "mytab", prop)

方法二:字段可自由添减

df.foreachPartition(p => {
   
      @transient val conn = ConnectionPool.getConnection
      p.foreach(x => {
   
        val sql = "insert into app_id(id,date,appid,num) values (" +
          "'"+UUID.randomUUID+"'," +
          "'"+x.getInt(0)+"'," +
          "'"+x.getString(1)+"'," +
          "'"+x.getLong(2)+"'" +
          ")"
        val stmt = conn.createStatement
        stmt.executeUpdate(sql)
      })
      ConnectionPool.returnConnection(conn)
    })

数据库链接池:

package com.prince.spark.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;

public class ConnectionPool {
   
    private static LinkedList<Connection> connectionQueue;

    static {
   
        try {
   
            Class.forName("com.mysql.jdbc.Driver");
        }catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        }
    }

    public synchronized static Connection getConnection() {
   
        try {
   
            if (connectionQueue == null) {
   
                connectionQueue = new LinkedList<Connection>();
                for (int i = 0;i < 5;i ++) {
   
                    Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://192.168.1.97:3306/xiang_log?characterEncoding=utf8",
                            "root",
                            "123456"
                    );
                    connectionQueue.push(conn);
                }
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值