在Pig中按地图分组关系

时间:2019-06-11 15:14:15

标签: apache-pig

我想将地图用作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

0 个答案:

没有答案