Spark:讀取mysql數(shù)據(jù)作為DataFrame

讀取mysql數(shù)據(jù)作為DataFrame

import java.text.SimpleDateFormat
import java.util.{Calendar, Date}

import com.iptv.domain.DatePattern
import com.iptv.job.JobBase
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.DoubleType
import org.apache.spark.sql.{DataFrame, SQLContext, SaveMode}
import org.apache.spark.{SparkConf, SparkContext}

/**
    * 獲取配置文件
    *
    * @param proPath
    * @return
    */
  def getProPerties(proPath: String): Properties = {
    val properties: Properties = new Properties()
    properties.load(new FileInputStream(proPath))
    properties
  }

  /**
    * 獲取 Mysql 表的數(shù)據(jù)
    *
    * @param sqlContext
    * @param tableName 讀取Mysql表的名字
    * @param proPath   配置文件的路徑
    * @return 返回 Mysql 表的 DataFrame
    */
  def readMysqlTable(sqlContext: SQLContext, tableName: String, proPath: String) = {
    val properties: Properties = getProPerties(proPath)
      sqlContext
        .read
        .format("jdbc")
        .option("url", properties.getProperty("mysql.url"))
        .option("driver", properties.getProperty("mysql.driver"))
        .option("user", properties.getProperty("mysql.username"))
        .option("password", properties.getProperty("mysql.password"))
        //        .option("dbtable", tableName.toUpperCase)
        .option("dbtable", tableName)
        .load()

  }

  /**
    * 獲取 Mysql 表的數(shù)據(jù) 添加過濾條件
    *
    * @param sqlContext
    * @param table           讀取Mysql表的名字
    * @param filterCondition 過濾條件
    * @param proPath         配置文件的路徑
    * @return 返回 Mysql 表的 DataFrame
    */
  def readMysqlTable(sqlContext: SQLContext, table: String, filterCondition: String, proPath: String) = {
    val properties: Properties = getProPerties(proPath)
    var tableName = ""
      tableName = "(select * from " + table + " where " + filterCondition + " ) as t1" //支持將條件套入sql將臨時表用作數(shù)據(jù)源
      sqlContext
        .read
        .format("jdbc")
        .option("url", properties.getProperty("mysql.url"))
        .option("driver", properties.getProperty("mysql.driver"))
        .option("user", properties.getProperty("mysql.username"))
        .option("password", properties.getProperty("mysql.password"))
        //        .option("dbtable", tableName.toUpperCase)
        .option("dbtable", tableName)
        .load()
  }

使用示例

//不添加過濾條件
val conf: SparkConf = new SparkConf().setAppName(getClass.getSimpleName)
    val sc: SparkContext = new SparkContext(conf)
    val sqlContext: SQLContext = getSQLContext(sc)
    import sqlContext.implicits._
val test_table_dataFrame: DataFrame = readMysqlTable(sqlContext, "TEST_TABLE", proPath).persist(PERSIST_LEVEL)
----------------------------------------------------------------------------------------------------
//添加過濾條件
//獲取 task_id = ${task_id} 數(shù)據(jù)做為DataFrame
val conf: SparkConf = new SparkConf().setAppName(getClass.getSimpleName)
    val sc: SparkContext = new SparkContext(conf)
    val sqlContext: SQLContext = getSQLContext(sc)
    import sqlContext.implicits._
val test_table_dataFrame = readMysqlTable(sqlContext, "TEST_TABLE", s"task_id=${task_id}", configPath)

配置文件部分內(nèi)容

配置文件部分內(nèi)容
#mysql數(shù)據(jù)庫配置
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://0.0.0.0:3306/iptv?useSSL=false&autoReconnect=true&failOverReadOnly=false&rewriteBatchedStatements=true
mysql.username=lillclol
mysql.password=123456

#hive
hive.root_path=hdfs://ns1/user/hive/warehouse/

此為本人日常工作中的原創(chuàng)總結(jié),轉(zhuǎn)載請注明出處K砀唷!E熘搿W诩妗躏鱼!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市针炉,隨后出現(xiàn)的幾起案子挠他,更是在濱河造成了極大的恐慌,老刑警劉巖篡帕,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殖侵,死亡現(xiàn)場離奇詭異,居然都是意外死亡镰烧,警方通過查閱死者的電腦和手機拢军,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怔鳖,“玉大人茉唉,你說我怎么就攤上這事〗嶂矗” “怎么了度陆?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長献幔。 經(jīng)常有香客問我懂傀,道長,這世上最難降的妖魔是什么蜡感? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任蹬蚁,我火速辦了婚禮,結(jié)果婚禮上郑兴,老公的妹妹穿的比我還像新娘犀斋。我一直安慰自己,他們只是感情好情连,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布叽粹。 她就那樣靜靜地躺著,像睡著了一般却舀。 火紅的嫁衣襯著肌膚如雪球榆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天禁筏,我揣著相機與錄音持钉,去河邊找鬼。 笑死篱昔,一個胖子當(dāng)著我的面吹牛每强,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播州刽,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼空执,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穗椅?” 一聲冷哼從身側(cè)響起辨绊,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匹表,沒想到半個月后门坷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宣鄙,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年默蚌,在試婚紗的時候發(fā)現(xiàn)自己被綠了冻晤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡绸吸,死狀恐怖鼻弧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锦茁,我是刑警寧澤攘轩,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站码俩,受9級特大地震影響度帮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握玛,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一够傍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挠铲,春花似錦冕屯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓢棒,卻和暖如春浴韭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脯宿。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工念颈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人连霉。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓榴芳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親跺撼。 傳聞我的和親對象是個殘疾皇子窟感,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料歉井? 從這篇文章中你...
    hw1212閱讀 12,753評論 2 59
  • MySQL邏輯架構(gòu) 下面是一幅MySQL各組件之間如何協(xié)同工作的架構(gòu)圖柿祈,有助于我們深入理解MySQL服務(wù)器。 如圖...
    騎小豬看流星閱讀 4,809評論 2 135
  • 給自己樹立一個目標(biāo),那就是77天的早點躏嚎,豐富蜜自,營養(yǎng),孩子喜歡紧索!就算是挑戰(zhàn)一下自己吧袁辈! 雞蛋紫菜湯菜谣,牛肉鮮筍飯 材料...
    花之命生閱讀 334評論 2 2
  • 【1】我們使用艾灸治病時中醫(yī)老師會給我們配幾個穴珠漂,那么這些穴位灸的時候是有固定順序的。順序是先陽后陰尾膊,背部為陽媳危,腹...
    了哥王閱讀 686評論 0 2