成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

借hbase-rdd二次開發(fā)談如何在Spark Core之上擴建自己的模塊

開發(fā) 架構 Spark
我是51CTO學院講師張敏,在51CTO學院 “4.20 IT充電節(jié)”(4月19~20日) 到來之際,和大家分享一下Spark Core之上擴建自己的模塊的經驗。

我是51CTO學院講師張敏,在51CTO學院 “4.20 IT充電節(jié)”(4月19~20日) 到來之際,和大家分享一下Spark Core之上擴建自己的模塊的經驗。正文來啦~~~

[[188540]]

hbase-rdd是一個構建在SparkContext基礎之上的用于對Hbase進行增刪改查的第三方開源模塊,目前***版本為0.7.1。目前該rdd在操作hbase時,默認調用隱式方法。

 

  1. implicitdef stringToBytes(s: String): Array[Byte] = {  
  2. Bytes.toBytes(s)  

將RDD的key轉換成字節(jié)b,然后調用Hbase的put(b)方法保存rowkey,之后將RDD的每一行存入hbase。

在軌跡圖繪制項目數(shù)據(jù)計算中,我們考慮到hbase的rowkey的設計——盡量減少rowkey存儲的開銷。雖然hbase-rdd最終的rowkey默認都是采用字節(jié)數(shù)組,但這個地方我們希望按自己的方式組裝rowkey。使用MD5(imei)+dateTime組成的字節(jié)數(shù)組作為rowkey。因此默認的hbase-rdd提供的方法是不滿足我們存儲需求的,需要對源代碼進行修改。在toHbase方法中,有一個convert方法,該方法將對RDD中的每一行數(shù)據(jù)進行轉化,使用RDD中的key生成Put(Bytes.toBytes(key))對象,該對象為之后存儲Hbase提供rowkey。

在convert函數(shù)中,對其實現(xiàn)進行了改造,hbase-rdd默認使用stringToBytes隱式函數(shù)將RDD的String類型的key轉換成字節(jié)數(shù)組,這里我們需要改造,不使stringToBytes隱式方法,而是直接生成字節(jié)數(shù)據(jù)。

 

  1. protected def convert(id: String, values: Map[String, Map[String, A]], put: PutAdder[A]) = {  
  2. val strs = id.split("," 
  3. val imei = strs {0}  
  4. val dateTime = strs {1}  
  5. val b1 = MD5Utils.computeMD5Hash(imei.getBytes())  
  6. val b2 = Bytes.toBytes(dateTime.toLong)  
  7. val key = b1.++(b2)  
  8. val p = new Put(key)//改造  
  9. var empty = true  
  10. for {  
  11. (family, content) <- values  
  12. (key, value) <- content  
  13. } {  
  14. empty = false  
  15. if (StrUtils.isNotEmpty(family) &&StrUtils.isNotEmpty(key)) {  
  16. put(p, family, key, value)  
  17.  
  18.  
  19. if (empty) None else Some(new ImmutableBytesWritable, p)  

這樣就實現(xiàn)了使用自己的方式構建rowkey,當然基于此思想我們可以使用任意的方式構建rowkey。

在使用hbase-rdd插件的過程中,我在思考,默認的RDD上是沒有toHbase方法的,那為什么引入hbase-rdd包之后,RDD之上就有toHbase方法了?經過查看源碼,發(fā)現(xiàn)hbase-rdd包中提供了兩個隱式方法:

  1. implicitdef toHBaseRDDSimple[A](rdd: RDD[(String, Map[String, A])])(implicit writer: Writes[A]): HBaseWriteRDDSimple[A] =new HBaseWriteRDDSimple(rdd, pa[A]) 
  2. implicit def toHBaseRDDSimpleTS[A](rdd: RDD[(String, Map[String, (A, Long)])])(implicit writer: Writes[A]): HBaseWriteRDDSimple[(A, Long)] =new HBaseWriteRDDSimple(rdd, pa[A]) 

這兩個方法在發(fā)現(xiàn)RDD上沒有toHbase方法時會自動嘗試調用,從隱式定義中嘗試找到解決方案,嘗試之后發(fā)現(xiàn)有定義toHBaseRDDSimple隱式方法,于是調用該隱式方法新建HBaseWriteRDDSimple類,返回hBaseWriteRDDSimple,而在hBaseWriteRDDSimple對象中是有toHbase方法的,因此在引入hbase-rdd之后,可以發(fā)現(xiàn)原本沒有toHbase方法的RDD上有toHbase方法了。這一切都要歸功于Scala強大的隱式轉換功能。

那明白了原理,是否我們可以基于RDD寫自己的模塊,說干就干!

***步:新建Trait

 

  1. traitHaha{ 
  2. implicitdef gaga[A](rdd: RDD[String]): Hehe= 
  3. newHehe(rdd) 

第二步:新建Hehe類

 

  1. final  class Hehe(rdd:RDD[String]) { 
  2. def wow(tableName:String,family:String): Unit ={ 
  3. println("---------------------------------------------"
  4. println("tableName:"+tableName+" - family:"+family) 
  5. println("size:"+rdd.count()) 
  6. rdd.collect().foreach(data=>println(data)) 
  7. println("---------------------------------------------"
  8.    } 

第三步:新建包對象

  1. package object test extends Haha 

第四步:新建test類

 

  1. object Test{ 
  2. def main(args: Array[String]) { 
  3. valsparkConf = new SparkConf().setAppName("Test"
  4. valsc = new SparkContext(sparkConf) 
  5. sc.makeRDD(Seq("one","two","three","four")).wow("taskDataPre","T"
  6.   } 

項目結構圖:

借hbase-rdd二次開發(fā)談如何在Spark Core之上擴建自己的模塊

運行效果圖:

借hbase-rdd二次開發(fā)談如何在Spark Core之上擴建自己的模塊

希望對大家以后的開發(fā)有幫助,同時借鑒本案例,在Spark Core之上構建自己的小模塊。

51CTO學院 4.20 IT充電節(jié)

(19-20號兩天,100門視頻課程免單搶,更有視頻課程會員享6折,非會員享7折,套餐折上8折,微職位立減2000元鉅惠)

活動鏈接:http://edu.51cto.com/activity/lists/id-47.html?wenzhang

相關視頻教程:

【大數(shù)據(jù) Spark2.x 流數(shù)據(jù)處理】精通Spark流數(shù)據(jù)處理(持續(xù)完畢)

責任編輯:未麗燕 來源: 51CTO學院
相關推薦

2022-03-11 22:52:29

調試版本編譯器

2011-08-23 14:14:02

Oracle EBS二

2016-12-20 14:35:52

監(jiān)控報警系統(tǒng)經驗

2012-05-11 14:31:50

2012-07-17 10:53:25

航天信息ERP

2021-09-03 13:54:45

雙重勒索勒索軟件攻擊

2016-10-24 09:52:45

SparkRDD容錯

2016-10-24 23:04:56

SparkRDD數(shù)據(jù)

2020-10-29 15:13:55

數(shù)字科技金融行業(yè)互聯(lián)網

2015-09-11 13:34:14

云計算云趨勢

2017-03-24 21:26:26

代碼架構Java

2011-08-05 12:36:01

2021-07-07 23:25:18

RedisFlinkSQL

2024-02-23 08:13:25

Excalidraw白板工具開源

2012-06-12 16:45:57

PHP

2021-09-15 15:50:46

hashmap算法軟件開發(fā)

2021-09-15 11:38:36

Hashmap二次算法列表

2021-10-19 14:22:14

鴻蒙HarmonyOS應用

2022-10-17 08:03:47

封裝vue組件

2016-10-09 23:47:04

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久 | 色网站在线 | 日韩精品一区二区三区中文字幕 | 日韩欧美久久 | 色婷婷影院 | 国产成在线观看免费视频 | 国产亚洲精品久久久久久豆腐 | 欧美在线观看网站 | 成人久久网 | 国产中文字幕av | 久久33| 久久毛片 | 在线播放国产视频 | 日本不卡一区 | 欧美韩一区二区 | 国产精品久久久久一区二区三区 | 国外成人在线视频 | 丁香婷婷久久久综合精品国产 | 天天操夜夜艹 | 亚洲国产精品第一区二区 | 亚洲精品9999 | 精品1区2区| 欧美成人第一页 | 欧美视频一区二区三区 | 亚洲欧美日韩一区二区 | 欧美性区 | 成人一区二区三区在线观看 | 中文字幕一区在线观看视频 | 久久爱综合 | 亚洲人成人一区二区在线观看 | 国产a视频 | 久艹av| 高清人人天天夜夜曰狠狠狠狠 | 91超碰在线观看 | 成人日批视频 | 可以免费看的毛片 | 亚洲精品区 | 黄色在线网站 | 国产欧美精品一区二区色综合朱莉 | 男人的天堂一级片 | 情侣黄网站免费看 |