如何在HIVE / PIG中找到MIN值记录

时间:2015-03-20 07:19:01

标签: hive apache-pig min

购物车有N个产品,产品可以从世界各地的M个地方发货。每个产品可能有1个或更多。运输船的运输。每个承运人都有自己的运费。

找出每条路线的经济载体。应该只有一个承运人处理来自该地点的所有产品。

例如:

产品,ShippingCharge,Carriers,发货自

P1,10,DHL,US

P1,15,UPS,US

P2,20,DHL,US

P2,14,UPS,US

产品P1& P2应使用经济型载体运输,DHL&在这种情况下UPS。

找出每条路线的经济载体。

输出应为:

(P1,10,DHL,US)

(P2,14,UPS,US)

有人可以帮助我在HIVE / PIG中实现这一结果。

2 个答案:

答案 0 :(得分:1)

你能试试吗?

<强>输入

P1,10,DHL,US
P1,15,UPS,US
P2,20,DHL,US
P2,14,UPS,US

<强> PigScript:

A = LOAD 'input' USING PigStorage(',') AS (Products:chararray, ShippingCharge:int, Carriers:chararray, ShippedFrom:chararray);
B = GROUP A BY Products;
C = FOREACH B {
                 sortByAsc = ORDER A BY ShippingCharge ASC;
                 min = LIMIT sortByAsc 1;
                 GENERATE FLATTEN(min);
              }
DUMP C;

<强>输出:

(P1,10,DHL,US)
(P2,14,UPS,US)

答案 1 :(得分:0)

应该看起来像:

SELECT base.* 
FROM base
JOIN 
( SELECT Products , MIN(ShippingCharge) FROM base GROUP by Products ) baseAggr
ON base.Products = baseAggr.Products