閱讀312 返回首頁    go 技術社區[雲棲]


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

  上一篇:go gradeview可拖動效果實現
  下一篇:go Spork: Pig on Spark實現分析