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总是出现在顶部?除了上述方法之外,我想就其他不同的方法(如子查询/联接)寻求您的建议。另外,你建议的方法的时间复杂性是什么?
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中创建了临时函数。