用于解析和计算累积值的 Pig 脚本
Pig Script to parse and compute cumulative value
包含两列的输入文件:
Visit ProductString
101 ;Cross Trainers;1;69.95,;Athletic Socks;10;29.99
102 ;Amplifier;1;120.90,;Headphone;2;59.99;leather wallet;1;99.99;
我正在寻找可以解析每行中的 "ProductString" 值并提供累积收入的 Pig 脚本。
ie.,Output:
69.95+29.99+120.90+59.99+99.99=380.82
我假设 59.99
之后应该有 ,
而 99.99
之后不应该有 ;
。如果是这样,您需要在 ,
上 tokenize
和 flatten
来提取产品,然后在 ;
上拆分以获得商品价格和数量。
查询:
data = LOAD 'db.table';
A = FOREACH data GENERATE visit, FLATTEN(TOKENIZE(product_string, ',')) AS tmp_col;
B = FOREACH A GENERATE visit, STRSPLIT(tmp_col, ';') AS prod;
C = FOREACH B GENERATE visit, prod. AS item:chararray
, (int)prod. AS qty:int, (double)prod. AS revenue:double;
grpd = GROUP C all;
D = FOREACH grpd GENERATE SUM(C.revenue);
DUMP D;
输出:
(380.82)
包含两列的输入文件:
Visit ProductString
101 ;Cross Trainers;1;69.95,;Athletic Socks;10;29.99
102 ;Amplifier;1;120.90,;Headphone;2;59.99;leather wallet;1;99.99;
我正在寻找可以解析每行中的 "ProductString" 值并提供累积收入的 Pig 脚本。
ie.,Output:
69.95+29.99+120.90+59.99+99.99=380.82
我假设 59.99
之后应该有 ,
而 99.99
之后不应该有 ;
。如果是这样,您需要在 ,
上 tokenize
和 flatten
来提取产品,然后在 ;
上拆分以获得商品价格和数量。
查询:
data = LOAD 'db.table';
A = FOREACH data GENERATE visit, FLATTEN(TOKENIZE(product_string, ',')) AS tmp_col;
B = FOREACH A GENERATE visit, STRSPLIT(tmp_col, ';') AS prod;
C = FOREACH B GENERATE visit, prod. AS item:chararray
, (int)prod. AS qty:int, (double)prod. AS revenue:double;
grpd = GROUP C all;
D = FOREACH grpd GENERATE SUM(C.revenue);
DUMP D;
输出:
(380.82)