312
技術社區[雲棲]
Apache DataFu: LinkedIn開源的Pig UDF庫
介紹
Apache DataFu分兩部分,本文介紹的是其Pig UDF的部分。代碼在Github上開源(除了代碼外,也有一些slides介紹鏈接)。
DataFu裏麵是一些Pig的UDF,主要包括這些方麵的函數:
bags、geo、hash、linkanalysis、random、sampling、sessions、sets、stats、urls
每方麵都對應一個package。
我把所有的函數源碼都瀏覽了一遍。其實本身對這些UDF的使用,官方的文檔上都有介紹,而且源碼的注釋裏也些的很清晰。所以使用本身是很簡單的。
從實現角度看,繼承自Pig EvalFunc體係。我們知道Pig裏的builtin functions裏,有代數函數(AVG、COUNT、Distinct、TOP),代數數學函數(MAX、SUM),基本數學函數(SIN、COS、TAN、FLOOR、LOG)等等。
DataFu實現了一個SimpleEvalFunc抽象類,繼承自EvalFunc,包裝了EvalFunc,為簡單的UDF簡化了實現過程(省略了一些異常檢查情況,隻需注重處理邏輯)。
通過反射的方式,在exec()方法裏做好參數null檢查,個數檢查,最後把參數傳給子類實現的call()方法,返回結果。
SimpleEvalFunc的子類繼承體係如下:

下麵那各個Package包含的函數功能簡單概況一下。
bags
對Bag的基本操作,涉及append、concat、group、left-join、split、count等等
geo
經緯度距離計算
hash
對輸入的String進行MD5和SHA的轉換
linkanalysis
一個PageRank的實現
random
隻有一個RandInt,輸入兩個值,輸出兩值之間的一個random值
sampling
SimpleRandomSample和ReservoirSample,後者的Reservoir是一個PriorityQueue,存的是ScoredTuple。前後者區別在於無界和有界的sample結果。
sessions
按一段time window來group
sets
Set之間的差、交、並。
處理的bag內的tuples必須是有序的。
stats
統計相關方法:
計算Quantile的兩種方式,一種是流式的。Quantile包含了Median。
方差。
urls
用於區分user agent來源(電腦還是手機,什麼係統的手機)
最後更新:2017-04-03 12:56:33
上一篇:
gradeview可拖動效果實現
下一篇:
Spork: Pig on Spark實現分析
關於Matlab的Web開發以及Matlab webservice服務的實現經驗
Android開發之ListView頁眉頁腳效果VS android背景漸變
JXCELL實例學習與研究(五) 之 斜體的設置以及字符串中顏色的顯示
在ActionBar添加刷新Loading狀態
微店MySQL自動化運維體係的構建之路
美國:俄羅斯和中國的網絡間諜瞄準英美
Java的MD5對密碼進行加密和驗證的類
C# 文件,文件夾的操作
綠盟科技網絡安全威脅周報2017.33 關注Foxit PDF Compressor installer DLL預加載漏洞CVE-2017-12892
分層自動化之UI自動化體係建設