Я хочу использовать карту в качестве ключа группировки в 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