当存在重复的键时,如何创建键-值Map?

pxy2qtax  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(384)

我对Pig不熟悉。我有下面的输出。

(001,Kumar,Jayasuriya,1123456754,Matara)
(001,Kumar,Sangakkara,112722892,Kandy)
(001,Rajiv,Reddy,9848022337,Hyderabad)
(002,siddarth,Battacharya,9848022338,Kolkata)
(003,Rajesh,Khanna,9848022339,Delhi)
(004,Preethi,Agarwal,9848022330,Pune)
(005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar)
(006,Archana,Mishra,9848022335,Chennai)
(007,Kumar,Dharmasena,758922419,Colombo)
(008,Mahela,Jayawerdana,765557103,Colombo)

如何创建上面的Map,使输出看起来像,

001#{(Kumar,Jayasuriya,1123456754,Matara),(Kumar,Sangakkara,112722892,Kandy),(001,Rajiv,Reddy,9848022337,Hyderabad)}
002#{(siddarth,Battacharya,9848022338,Kolkata)}

我试过tomap函数。

mapped_students = FOREACH students GENERATE TOMAP($0,$1..);

但是我无法转储上述命令的输出,因为进程抛出错误并在那里停止。任何帮助都将不胜感激。

0vvn1miw

0vvn1miw1#

我认为您正在尝试实现的是将记录分组为具有相同id的元组。
根据tomap函数,它将键/值表达式对转换为一个Map,因此您将无法对rest记录进行分组,并将导致类似于无法打开alias的迭代器。。
根据您的期望输出,这里是一段代码。

A = LOAD 'path_to_data/data.txt' USING PigStorage(',') AS (id:chararray,first:chararray,last:chararray,phone:chararray,city:chararray);

如果不想给出模式,则:

A = LOAD 'path_to_data/data.txt' USING PigStorage(',');

B = GROUP A BY $0; (this relation will group all your records based on your first column)

DESCRIBE B; (this will show your described schema)

DUMP B;

希望这有帮助。。

相关问题