当前位置: 首页 > 知识库问答 >
问题:

使用配置单元udf函数计算运行和

宓英哲
2023-03-14
SELECT a.storeid, a.smonth, a.sales FROM table a;
1001    1       35000.0
1002    2       35000.0
1001    2       25000.0
1002    3       110000.0
1001    3       40000.0
1002    1       40000.0
1001    1       35000.0 35000.0
1001    2       25000.0 60000.0
1001    3       40000.0 100000.0
1002    1       40000.0 40000.0
1002    2       35000.0 75000.0
1002    3       110000.0 185000.0
SELECT a.storeid, a.smonth, a.sales, rsum(sales)
FROM (SELECT * FROM table SORT BY storeid, smonth) a;

显然,它不会产生上面的输出,因为只有一个映射器,并且调用了相同的udf实例,该实例在总集上生成一个运行和。我的目标是为每个storeid重置udf类中的runningSum实例变量,以便evaluate函数返回上述输出。我使用了以下内容:1。传递storeid变量rsum(sales,storeid),然后我们就可以在udf类中正确地处理这种情况。2.使用以下查询中的2个映射器:

set mapred.reduce.tasks=2;
SELECT a.storeid, a.smonth, a.sales, rsum(sales)
FROM (SELECT * FROM table DISTRIBUTE BY storeid SORT BY storeid, smonth) a;

1002    1       40000.0 40000.0
1002    2       35000.0 75000.0
1002    3       110000.0 185000.0
1001    1       35000.0 35000.0
1001    2       25000.0 60000.0
1001    3       40000.0 100000.0

为什么1002总是出现在顶部?除了上述方法之外,我想就其他不同的方法(如子查询/联接)寻求您的建议。另外,你建议的方法的时间复杂性是什么?

共有1个答案

阳博赡
2023-03-14

Hive提供了一个更好的方法来在单行中实现这一点-
请按照下面的过程来实现您的目标输出

创建一个可以包含数据集的配置单元表-

1001    1       35000.0
1002    2       35000.0
1001    2       25000.0
1002    3       110000.0
1001    3       40000.0
1002    1       40000.0

现在只需在配置单元终端中运行以下命令-

SELECT storeid, smonth, sales, SUM(sales) OVER (PARTITION BY storeid ORDER BY smonth) FROM table_name;
1001  1  35000.0  35000.0
1001  2  25000.0  60000.0
1001  3  40000.0  100000.0
1002  1  40000.0  40000.0
1002  2  35000.0  75000.0
1002  3  110000.0 185000.0
 类似资料:
  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 我找不到以上两种方式有什么不同。有人能给我解释一下或者指导我正确的材料吗?

  • 添加/home/cloudera/date.jar到类路径添加资源:/home/cloudera/date.jar 请有人帮帮我,因为我是新来蜂巢的。有人能告诉我要遵循的步骤吗

  • 我看到这样一个udf: https://github.com/edwardcapriolo/hive-geoip 如何在Hive中利用udf?我可以自己创建函数名吗?

  • 您的回应将不胜感激。谢了!

  • 我已经为hive创建了一个名为Zodiac的UDF,然后添加了JAR文件,并在hive中创建了临时函数。