pig中map的组键值

pig中map的组键值,map,apache-pig,Map,Apache Pig,我是新来的。喂,我们有一个文件 [a#1,b#2,c#3] [a#4,b#5,c#6] [a#7,b#8,c#9] 猪字 A = LOAD 'txt' AS (in: map[]); B = FOREACH A GENERATE in#'a'; DUMP B; 我们知道我们可以在键中输入值。在上面的示例中,我使用了包含与键“a”相关的值的映射。 假设我不知道键,我想将与关系中键相关的值分组并转储它 (a,{1,4,7}) (b,{2,5,8}) (c,{3,6,9}) pig是否允

我是新来的。喂,我们有一个文件

[a#1,b#2,c#3]
[a#4,b#5,c#6]
[a#7,b#8,c#9]
猪字

A = LOAD 'txt' AS (in: map[]);
B = FOREACH A GENERATE in#'a';
DUMP B;
我们知道我们可以在键中输入值。在上面的示例中,我使用了包含与键“a”相关的值的映射。 假设我不知道键,我想将与关系中键相关的值分组并转储它

(a,{1,4,7})
(b,{2,5,8})
(c,{3,6,9})    

pig是否允许此类操作或需要配合UDF?请帮我解决这个问题。谢谢。

您可以创建一个自定义的
UDF
,将地图转换为一个袋子(使用Pig v0.10.0):

现在按键分组并使用嵌套的foreach:

C = foreach (group B by k) {
    value = foreach B generate v;
    generate group as key, value;
};
dump C;
(a,{(1),(4),(7)})
(b,{(2),(5),(8)})
(c,{(3),(6),(9)})

我认为最后的嵌套foreach将不起作用。。。由于从v0.9开始,FOREACH不允许在FOREACH内部进行,因此该样品在允许的v0.10.0中进行。无论如何,我更新了我的答案,指出了我使用的Pig版本。我想我必须升级到v0.10,因为我真的想在嵌套foreach中选择列。:)@LorandBendig,我也是PIG的新手,也有类似的场景,我尝试过,但在执行时,我得到了错误
2015-01-03 11:21:24655[main]error org.apache.PIG.tools.grunt.grunt-error 1070:无法使用导入解析mupigudf.MyPigUDF:[,java.lang.,org.apache.PIG.builtin.,org.apache.PIG.impl.builtin.]
你能告诉我出了什么问题吗?我也在谷歌上搜索过,但不明白为什么会出现这种情况。@MegaBytes难道你没有忘记注册包含MyPigUDF的jar吗?
B = foreach A generate 
      flatten(com.example.MapToBag(in)) as (k:chararray, v:chararray);
describe B;
B: {k: chararray,v: chararray}
C = foreach (group B by k) {
    value = foreach B generate v;
    generate group as key, value;
};
dump C;
(a,{(1),(4),(7)})
(b,{(2),(5),(8)})
(c,{(3),(6),(9)})