天天看点

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的子类继承体系如下:

Apache DataFu: LinkedIn开源的Pig UDF库介绍

下面那各个package包含的函数功能简单概况一下。

对bag的基本操作,涉及append、concat、group、left-join、split、count等等

经纬度距离计算

对输入的string进行md5和sha的转换

一个pagerank的实现

只有一个randint,输入两个值,输出两值之间的一个random值

simplerandomsample和reservoirsample,后者的reservoir是一个priorityqueue,存的是scoredtuple。前后者区别在于无界和有界的sample结果。

按一段time window来group

set之间的差、交、并。

处理的bag内的tuples必须是有序的。

统计相关方法:

      计算quantile的两种方式,一种是流式的。quantile包含了median。

      方差。

用于区分user agent来源(电脑还是手机,什么系统的手机)

全文完 :)