Spark經過JdbcRdd鏈接Oracle數據庫(scala)

1、代碼html

package com.sgcc.hj

import java.sql.DriverManager

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

/**
  * Created by user on 2016/6/17.
  */
object JdbcTest {
  def main(args: Array[String]) {
    val conf = new SparkConf()
    val sc = new SparkContext(conf)

    val rdd = new JdbcRDD(
      sc,
      () => {
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()
        DriverManager.getConnection("jdbc:oracle:thin:@172.16.222.112:1521:pms", "scyw", "scyw")
      },
      "SELECT * FROM MW_APP.CMST_AIRPRESSURE WHERE 1 = ? AND rownum < ?",
      1, 10, 1,
      r => (r.getString(1),r.getString(2),r.getString(5)))
    rdd.collect().foreach(println)
    sc.stop()
  }
}

2、運行截圖java

  命令:spark-submit --master yarn --jars /opt/test/data/oracle.jdbc_10.2.0.jar --name OracleRead --class com.sgcc.hj.JdbcTest--executor-memory 1G /opt/test/data/sparktest.jar(注意這裏依賴了oracle的jar包要在加上)sql

 

3、答疑apache

一、官方文檔地址:api

  https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.JdbcRDDoracle

二、JdbcRdd中的構造參數:函數

  前面三個就不解釋了,一眼就能夠看懂,後面三個數字,前兩個表示SQL中的參數,必須是LONG型,並且必須有,這個是Spark源碼要求的,若是沒有LONG型的條件,能夠使用1=1這種參數(第三個參數要爲1);第三個參數表示分區查詢,例如給定前兩個參數爲1和20,第三個參數爲2,那麼SQL就會執行兩次,第一次參數爲(1, 10),第二次爲(11, 20);最後一個參數是函數,這裏表示把一條記錄裏的第一、二、5個字段組成三元組,固然也能夠變成別的形式。spa

相關文章
相關標籤/搜索