Hive UDAF開發 個人補充理解

2021-09-27 06:45:19 字數 1341 閱讀 8106

總結

hive的比較難的部分應該就是genericudaf,看了兩天終於看明白了,有些點是我自己遇到卡住的點,記錄下來希望對大家有所幫助。

一開始看的是《hive 程式設計指南》中關於genericudaf的章節,例子有點難了。講的是group_concat的實現。查了資料後覺得網上寫的部落格非常好,例子比較簡單,更能夠明白到底在說什麼。

一定要結合mapreduce的過程來看,才會想明白。

關於objectinspector

想要理解genericudaf一定要理解objectinspector,這是貫徹在其中的乙個概念。這裡也說了一篇博文,一定要參考。hive中objectinspector的作用。 

objectinspector在我看來是什麼?其實就是型別檢查和通過這個類能得到值,並且幫助它序列化和反序列化,達到資料流轉無障礙的目的。

上圖這些過程之間流轉都是通過objectinspector達到資料流轉的, 要知道這些過程中不乏有著跨節點的操作。

model

這是一定要理解的,model是什麼? 其實model就是決定了在map階段和reduce階段 在涉及到對列進行udf函式計算的時候,會呼叫udf類中的哪些方法,都是由model值決定的。並不是所有的方法都會呼叫,只會呼叫有限的幾個。再由上面的提到的objectinspector進行資料的流轉。

public static enum mode ;12

3456

78910

1112

1314

1516

1718

1920

2122

23這個類就是用來型別檢查的。

public genericudafevaluator getevaluator(typeinfo parameters)

1這是我非常想說的類,init()他會根據model值的不同來決定輸入的型別和輸出的型別,非常的靈活。並且注意,init()的呼叫不是單次的,是多次的。

// 確定各個階段輸入輸出引數的資料格式objectinspectors

public  objectinspector init(mode m, objectinspector parameters) throws hiveexception;12

注意這裡的迭代,當map階段從表中讀取一行時,就會呼叫一次iterate()方法,如果存在多行,就會呼叫多次。

// map階段,迭代處理輸入sql傳過來的列資料

public void iterate(aggregationbuffer agg, object parameters) throws hiveexception;、12

這是最精華的圖,請多次理解,並且結合**推導過程。

其餘資料參考。

Maemo開發個人感想

做完maemo的開發本來有些感想,有些認識一直沒有機會寫下來。借這個機會將其寫下來供以後參考,同時也可以給不了解maemo的希望了解這個東西的人乙個參考。我就大概介紹一下maemo以及開發注意的問題。sybian是nokia的主流開發平台,但maemo是nokia的乙個核心高階開發平台。該平台基於g...

Golang beego 開發個人部落格

作為一名web開發者,開發乙個個人部落格是乙個很簡單的事情,正好最近學習了 beego 正好借助它能夠快速開發的特點,快速開發乙個個人部落格。beego 是乙個快速開發 go 應用的 http 框架,他可以用來快速開發 api web 及後端服務等各種應用,是乙個 restful 的框架,主要設計靈...

vue開發個人部落格

整體風格上,我對設計沒有太多的見解,做的時候參考了好多網上現有的部落格,總體喜歡簡約。正好在學vue vue vue router axios element ui框架的樣式 aos.css 動畫 less media 查詢 自適應 web h5 包含技術點 axios請求封裝 aos動畫的使用 部...