介绍

Apache DataFu分两部分,本文介绍的是其Pig UDF的部分。代码在Github上开源(除了代码外。也有一些slides介绍链接)。

DataFu里面是一些Pig的UDF。主要包含这些方面的函数:

bags、geo、hash、linkanalysis、random、sampling、sessions、sets、stats、urls

每方面都相应一个package。


我把全部的函数源代码都浏览了一遍。事实上本身对这些UDF的使用,官方的文档上都有介绍,并且源代码的凝视里也些的非常清晰。所以使用本身是非常easy的。

从实现角度看,继承自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来源(电脑还是手机。什么系统的手机)




全文完 :)


Apache DataFu: LinkedIn开源的Pig UDF库的更多相关文章

  1. linkedin开源的kafka-monitor安装文档

    linkedin开源的kafka-monitor安装文档 linkedin 开源的kafka-monitor的安装使用可以参考官方的readme:流程介绍的已经比较清楚,但是还是有一些地方需要修正.让 ...

  2. Spark之路 --- Scala IDE Maven配置(使用开源中国的Maven库)和使用

    为什么要使用Maven 摘自百度百科的介绍 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.Maven 除了以程序构建能力为特色之外,还提 ...

  3. Pig UDF 用户自定义函数

    注册UDF do.pig的内容如下: register /xx/yy.jar data = load 'data'; result = foreach data generate aa.bb.Uppe ...

  4. Ptypes一个开源轻量级的c++库,包括对一些I/O操作、网络通信、多线程和异常处理的封装

    C++开源项目入门级:Ptypes    Ptypes一个开源轻量级的c++库,包括对一些I/O操作.网络通信.多线程和异常处理的封装.虽然代码有限,包括的内容不少,麻雀虽小,五脏俱全.    提高: ...

  5. 几款国产开源的Windows界面库

    上次介绍的几款图形界面库http://blog.okbase.net/vchelp/archive/23.html都是国外的开源项目,今天介绍的几款都是国人的开源项目,大部分是采用DirectUI设计 ...

  6. 开源的DirectUI界面库

    1. duilib简介 duilib是一个开源的DirectUI界面库,简洁但是功能强大.而且还是BSD的license,所以即便是在商业上,大家也可以安心使用.现在大家可以从这个网站获取到他们所有的 ...

  7. MyBatis 本是apache的一个开源项目iBatis

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...

  8. Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。

    Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console.file等.Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别. ...

  9. 开源跨平台声波传输库:Sonic

    简介 [Sonic](https://github.com/linyehui/sonic) 是一个跨平台的声波传输库(iOS & Android),技术上类似于[chirp](http://c ...

随机推荐

  1. Android中实现整个视图切换的左右滑动效果

    Android中提供了一个Gallary,可以实现图片或者文本的左右滑动效果. 如何让整个视图都能实现左右滑动,达到类似于Gallary的效果呢?可以直接用一个开源的ViewFlow来实现.   项目 ...

  2. <%%>创建内联代码块(表达式)

    其实<%%>很早之前就见过了,只是会用一点功能,其它的不甚了解.今天偶尔见到了它的庐山真面目,现在共享给大家. 语法 代码块呈现(<%%>)定义了当呈现页时执行的内联代码或内联 ...

  3. 1.14 Python基础知识 - 文件操作

    应用程序往往需要从磁盘文件中读取数据,或者把数据存储到磁盘中文件里,以持久的保存数据.文件可以看作是数据的集合,文件的输入与输出通过流来实现.流有5种基本的操作:打开.读取.写入.改变当前位置和关闭. ...

  4. Bootstrap时间控件常用配置项

    1.给下面4个文本框初始化   $(function(){ $("#orderStartTime,#orderEndTime,#preSaleStartTime,#preSaleEndTim ...

  5. Flask项目之手机端租房网站的实战开发(十一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  6. Codeforces_GYM_100741 A

    http://codeforces.com/gym/100741/problem/A A. Queries time limit per test 0.25 seconds memory limit ...

  7. 洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…

    https://www.luogu.org/problem/show?pid=1118#sub 题目描述 FJ and his cows enjoy playing a mental game. Th ...

  8. Android 监听软键盘点击回车及换行事件

    mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean ...

  9. jquery的滚动事件

    $(selector).scroll(function);当滚动到合适的条件下,就触发某个函数. 现在基本就是前端利用AJAX对数据进行拼接操作,渲染进html的DOM结构中.

  10. 硬件——nrf51822第三篇,按键控制小灯

    现象是按键按下,小灯亮,按键抬起,小灯灭. 从这一节我们细致剖析gpio口的设置: nrf51822片上一共有32个数字引脚,分为4个port,如下: port 0 pin 0-7 port 1 pi ...