Группировка отношений по карте в Pig - PullRequest
0 голосов
/ 11 июня 2019

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