spark之使用JdbcRdd读取Mysql中的数据

 重点在new JdbcRDD时的七个参数:如下图所示

package com.thy.d20190417

import java.sql.DriverManager

import org.apache.spark.rdd.JdbcRDD
import org.apache.spark.{SparkConf, SparkContext}

object JdbcRDDDemo {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("IpLocation").setMaster("local[*]")
    val sc: SparkContext = new SparkContext(conf)
    val getConnection=()=>{
      DriverManager.getConnection("jdbc:mysql://localhost:3306/bigdata?characterEncoding=UTF-8", "root", "123568")
    }
    val jdbcRDD: JdbcRDD[(Int, String, Any)] = new JdbcRDD(
      sc,
      getConnection,
      "select * from logs where id<? and id>=?",
      1,
      5,
      3,//分区数目
      rs => {
        val id = rs.getInt(1)
        val name = rs.getString(2)
        val age = rs.getInt(3)
        (id, name, age)
      }
    )
    //触发 action
    println(jdbcRDD.collect().toBuffer)
    sc.stop()
  }
}

 

spark之使用JdbcRdd读取Mysql中的数据

 需要注意的是:在写JdbcRDD的sql的时候一般不写 < >,一般写<= >=.

比如我们读取范围为:1 5 ,数据库中有id:1 2 3 4 5 ,分区为2的时候。(1 2)(3 4 5)如果用where id >= ? and id <?

会出现(1 2)分区读到1读不到2,(3 4 5 )读到3 4 ,这样就没能读到需要的id=2的数据。