如何在hive/pig中找到最小值记录

rm5edbpk  于 2021-06-25  发布在  Pig
关注(0)|答案(2)|浏览(403)

一辆购物车有n种产品,这些产品可以从世界上m个地方发货。每种产品可能有一个或多个承运人装运。每个承运人都有自己的运费。
找出每条路线的经济承运人。只有一家承运人处理来自该地点的所有产品。
如:
产品,运费,承运人,发货地
p1,10,dhl,美国
p1,15,ups,美国
p2,20,dhl,美国
p2,14,ups,美国
产品p1和p2应使用经济型承运人,即dhl和ups运输。
找出每条路线的经济承运人。

输出应为:

(p1,10,dhl,美国)
(p2,14,ups,美国)
有人能帮我在Hive/Pig中达到这个效果吗。

yebdmbv4

yebdmbv41#

它应该看起来像:

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

wixjitnu2#

你能试试这个吗?
输入

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

Pig手稿:

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)

相关问题