Spark 保存數(shù)據(jù)到MongoDB

背景交代

由于我們應(yīng)用系統(tǒng)使用的是mongo,所以每次操作結(jié)果都要輸出到MongoDB方便使用 清焕。

思路

1荷鼠、遇到這樣的情景我第一時間打開Spark官網(wǎng) Mongo數(shù)據(jù)源
2匹中、根據(jù)教程添加好依賴以后,開始配置鏈接信息点待。
3爱榕、根據(jù)教程創(chuàng)建Mongo的配置文件發(fā)現(xiàn)不少坑。

采坑
坑一
image.png

官方提供的demo都是不需要登錄憑證的花履。

坑二
image.png

1僧界、找到配置用戶密碼的缺發(fā)現(xiàn)在0.12.* 版本中 MongodbCredentials 類已經(jīng)移動包名了,直接拷貝文檔會報錯臭挽。
2捂襟、MongodbConfigBuilder 0.12.* 。MongodbConfigBuilder(map:Map,list:List)更本沒有這個構(gòu)造函數(shù)欢峰。
3葬荷、源碼配置文件沒有注釋,對于英語不好的我有點D疼纽帖。

最終在查看和調(diào)試源碼下找到關(guān)鍵字段
image.png

1宠漩、上面代碼大致意思以 MongodbConfig.Credentials 為key 讀取config中的屬性并轉(zhuǎn)換成[List[MongodbCredentials]] 對象,如果為空則獲取默認的配置懊直。最后map 成MongoCredential 對象扒吁。 從這里可以看出我們只需要配置MongodbConfig.Credentials 中配置用戶密碼就好了。

配置代碼
package cn.harsons.mbd.util

import cn.harsons.mbd.util.Config._
import com.stratio.datasource.mongodb._
import com.stratio.datasource.mongodb.config.MongodbConfig._
import com.stratio.datasource.mongodb.config.{MongodbConfigBuilder, MongodbCredentials}
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

/**
  * mongoDB操作工具
  *
  * @author liyabin
  * @date 2020/3/12 0012
  */
object MongoUtils {
  /**
    * 使用 mongoDB 集成方式 寫入mongo
    *
    * @param collectionName 集合名稱
    * @param data           數(shù)據(jù)集
    * @param sparkSession   spark 對象
    */
  def saveToMongo(collectionName: String, data: DataFrame, sparkSession: SparkSession): Unit = {
    // 已經(jīng)引入配置對象室囊,可以直接使用配置對象的屬性
    // Credentials 認證 需要用戶名和密碼
    val saveConfig = MongodbConfigBuilder(
      Map(Host -> List(mongo_host),
        Database -> mongo_database,
        Collection -> collectionName,
        SamplingRatio -> 1.0,
        WriteConcern -> "normal",
        SplitSize -> 8,
        SplitKey -> "_id",
        Credentials -> List(MongodbCredentials(mongo_user, mongo_authentication, mongo_password.toCharArray)))
    )
    data.saveToMongodb(saveConfig.build())
  }

  /**
    * 使用 Spark 原生的方式 寫入mongo
    *
    * @param collectionName 集合名稱
    * @param data           數(shù)據(jù)集
    * @param mode           數(shù)據(jù)寫入模式 (覆蓋雕崩、追加等)
    * @param sparkSession   sparkSession 對象
    */
  def writeToMongo(collectionName: String, data: DataFrame, mode: SaveMode, sparkSession: SparkSession): Unit = {
    // Credentials 官網(wǎng)上要求 如果是String 類型 使用這種方式 配置用戶憑證  user,authDataBase,password
    val options = Map("host" -> mongo_host,
      Credentials -> (mongo_user + "," + mongo_authentication + "," + mongo_password),
      "database" -> mongo_database,
      "collection" -> collectionName)
    data.write.format("com.stratio.datasource.mongodb").mode(mode)
      .options(options)
      .save()
  }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市融撞,隨后出現(xiàn)的幾起案子盼铁,更是在濱河造成了極大的恐慌,老刑警劉巖尝偎,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饶火,死亡現(xiàn)場離奇詭異,居然都是意外死亡致扯,警方通過查閱死者的電腦和手機肤寝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抖僵,“玉大人鲤看,你說我怎么就攤上這事●烧耄” “怎么了刨摩?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長世吨。 經(jīng)常有香客問我澡刹,道長,這世上最難降的妖魔是什么耘婚? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任罢浇,我火速辦了婚禮,結(jié)果婚禮上沐祷,老公的妹妹穿的比我還像新娘嚷闭。我一直安慰自己,他們只是感情好赖临,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布胞锰。 她就那樣靜靜地躺著,像睡著了一般兢榨。 火紅的嫁衣襯著肌膚如雪嗅榕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天吵聪,我揣著相機與錄音凌那,去河邊找鬼。 笑死吟逝,一個胖子當著我的面吹牛帽蝶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播块攒,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼励稳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了囱井?” 一聲冷哼從身側(cè)響起麦锯,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琅绅,沒想到半個月后扶欣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡千扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年料祠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎羞。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡髓绽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妆绞,到底是詐尸還是另有隱情顺呕,我是刑警寧澤枫攀,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站株茶,受9級特大地震影響来涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜启盛,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一蹦掐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僵闯,春花似錦卧抗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至向图,卻和暖如春浦马,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背张漂。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工晶默, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人航攒。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓磺陡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漠畜。 傳聞我的和親對象是個殘疾皇子币他,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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

  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,867評論 0 5
  • 記得那是兩年前憔狞,有一天我感覺到牙齒有一些疼痛蝴悉。媽媽便帶我到江津區(qū)中醫(yī)院的牙科。給我檢查的是一位姓肖的醫(yī)生瘾敢,...
    李禎昊閱讀 150評論 0 1
  • 2017/2/6 デンマークの童話作家拍冠、アンデルセンの「影法師」は気味の悪い物語だ。若い學者が自分の影をなくしてし...
    行走在鋼絲上的魚閱讀 119評論 0 0
  • 春暖花開四月天簇抵, 微風拂面猶覺寒庆杜。 漁翁垂釣湘江岸, 魚兒水中嬉戲歡碟摆。
    莊上人閱讀 72評論 1 2
  • 記錄夢
    馨試水晶閱讀 524評論 7 51