zoukankan      html  css  js  c++  java
  • 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的使用,官方的文档上都有介绍,并且源代码的凝视里也些的非常清晰。所以使用本身是非常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来源(电脑还是手机。什么系统的手机)




    全文完 :)

  • 相关阅读:
    General Problem Solving Techniques [Beginner-1]~H
    做HDU1010 带出来一个小问题
    HDU1009
    hdu1007
    hdu 1008
    HDU1006
    hdu 1005
    hdu 1004
    UVA 10970 第一次比赛 D题 (后面才补的)
    LightOJ 1317 第八次比赛 A 题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7367892.html
Copyright © 2011-2022 走看看