Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在impala中编写java udf_Java_Hive_Impala - Fatal编程技术网

如何在impala中编写java udf

如何在impala中编写java udf,java,hive,impala,Java,Hive,Impala,我想在Impala中实现running total示例,如下所示: DATE | DAY | COUNT | Total 2014-11-12 | 1 | 12 | 12 2014-11-13 | 2 | 32 | 44 2014-11-14 | 3 | 50 | 94 To solve this problem using Impala, we might need temp v

我想在
Impala
中实现
running total
示例,如下所示:

DATE        |   DAY |   COUNT   |   Total
2014-11-12  |   1   |   12      |   12
2014-11-13  |   2   |   32      |   44
2014-11-14  |   3   |   50      |   94

To solve this problem using Impala, we might need temp variable like in MySql, which Impala does not support.
为此,我想使用JavaUDF将第一行总计与第二行计数相加。这样我就可以得到第二排的总数。我怎么能这样做。请建议。 还请提供将jar添加到
Impala
中的步骤。
您的帮助将非常有用。

如果您使用的是Impala 2.0,您可以使用分析(窗口)函数计算运行总数

比如说,

从您的_表中选择日期、日期、计数、累计(按日期排序)

有关分析函数的详细信息,请参见

更新:

不可能使用UDA以您想要的方式实现累积和,这就是“分析/窗口函数”存在的原因。为什么?UDA用于为聚合编写自定义函数,该聚合通过某个表达式对输入行进行分组,并将聚合fn应用于同一组中的所有行,但只为该组生成一个输出行。这有两个问题:

  • 您希望每个输入行都有一个输出行,其中每行的累积和都会更新。考虑下面的聚合查询:

    来自mytable的总和(x); 十,

    年龄,按年龄从学生组中计算(*); 14, 1 15, 10 16、11

    请注意,聚合如何“折叠”多行,并对整个集合中的函数(如sum或count)进行求值

  • 计算累计和时,需要在日期对行进行排序。如前所述,聚合将聚合fn应用于具有相同分组表达式的一组行,但它们可以以任何顺序应用。分析函数允许您按指定顺序将函数应用于一组行,这是计算所需累积和所需的顺序

  • 也就是说,在这种情况下,您可以使用自联接来生成所需的累积和。例如:

    > select t1.id, sum(t2.id) as csum from tbl t1 inner join tbl t2 on t1.id >= t2.id group by t1.id order by t1.id;
    +----+------------+
    | id | csum       |
    +----+------------+
    | 0  | 0          |
    | 1  | 1          |
    | 2  | 3          |
    | 3  | 6          |
    | 4  | 10         |
    | 5  | 15         |
    | 6  | 21         |
    | 7  | 28         |
    +----+------------+
    

    然而,这可能需要昂贵的计算成本,并且更难用SQL表示。理想情况下,您可以升级到Impala 2.0并使用分析功能。

    对不起,我应该提到Impala的版本。我目前使用的是AWS EMR现在支持的1.2.4版。