其实在Spark-Core中也可以向Java一样读取数据库的信息,Spark的JdbcRDD就可以实现这种功能, 它可以将数据加载到RDD中,然后再按照RDD中的方法进行处理,比如:sortBy,join,fielter等等。
#代码如下: -------------------------------------------------------------------------------- package com.liufu.org.core
import java.sql.DriverManager
import org.apache.spark.rdd.JdbcRDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by liufu on 2016/11/18.
*/
object JdbcRDDTest {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("jdbcRDD").setMaster("local[2]")
val sc: SparkContext = new SparkContext(conf)
//定义一个连接函数,后面需要传入给JdbcRDD的主构造器中。
val connection = ()=>{
Class.forName("com.mysql.jdbc.Driver").newInstance()
DriverManager.getConnection("jdbc:mysql://localhost:3306/bigdata","root","815325")
}
val resultRDD = new JdbcRDD(
sc, //SparkContext
connection, //连接数据库的函数
"select * from dept where deptno >= ? and deptno <= ?",20,40, //SQL语句,后面两个是SQL语句中需要填入的参数,就算不需要填写参数,也要补全
2, //本次操作的结果,分为多少个区。
r => { //将结果循环遍历,然后组装成tuple返回,当然也可以组装成String等类型。
(r.getString(1),r.getString(2))
}
)
println(resultRDD.collect().toBuffer)
sc.stop()
}
}
--------------------------------------------------------------------------------
#总结: 主要是那个JdbcRDD的参数如何设置