购物车有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中实现这一结果。
答案 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