我想将地图用作Pig Latin中的分组键。我尝试了以下方法,但是没有用。
首先,Pig默认不支持按地图分组,因为它是一种复杂的数据类型。因此,我将地图展平并使用该字段进行分组,但是分组仅发生在地图中不需要的键上。
数据看起来像这样。
id |map1 |profit
---------------------------------------------
1 |[a#'1', b#'2'] |20
2 |[a#'3', b#'4'] |40
3 |[a#'1', b#'2'] |50
4 |[a#'3', b#'8'] |10
所需结果
map1 |total_profit
-----------------------------
[a#'1', b#'2'] |70
[a#'3', b#'4'] |40
[a#'3', b#'8'] |10
这是我写的脚本。
data = LOAD 'data.txt' USING org.apache.hive.hcatalog.pig.HCatLoader();
flat_data = FOREACH data GENERATE
id as id,
FLATTEN(map1) as map1,
profit as profit;
grouping = GROUP flat_data BY map1;
result = FOREACH grouping GENERATE
group as map1,
sum(profit) as total_profit;
实际结果
map1 |total_profit
-----------------------------
a |120
b |120