我的Pig剧本需要一些帮助。我有2个csv文件,我想做一个共同的id他们之间的连接。
customer.csv :
1 ; nom1 ; prenom1
2 ; nom2 ; prenom2
3 ; nom3 ; prenom3
child.csv
1 ; enfant_1_1
2 ; enfant_1_2
3 ; enfant_1_3
1 ; enfant_2_1
1 ; enfant_3_1
所以一个顾客可以有很多孩子,但一个孩子只能有一个“顾客”。
我要创建此文件:
1 ; nom1 ; prenom1 ; enfant_1_1 ; enfant_2_1 ; enfant_3_1
2 ; nom2 ; prenom2 ; enfant_1_2
3 ; nom3 ; prenom3 ; enfant_1_3
这是我的方法:
首先我试着做:
1 ; enfant_1_1 ; enfant_2_1 ; enfant_3_1
2 ; enfant_1_2
3 ; enfant_1_3
之后我会加入custome.csv
告诉我你认为有一个最简单的方法:)
这是我的剧本:
donnees_Enfants = LOAD '/user/cloudera/Jeux/mini_jeu2.csv' USING PigStorage(';')
AS (id_parent:int,nom_enfant:chararray);
group_enfants = GROUP donnees_Enfants BY id_parent;
enfant_uneLigne = foreach group_enfants generate group, donnees_Enfants.nom_enfant;
grunt> echantillon = LIMIT enfant_uneLigne 50;
grunt> DUMP echantillon;
使用descripe:group\u enfants:{group:int,donnees\u enfants:{(id\u parent:int,nom\u enfant:chararray)}}enfant\u unaligne:{group:int,{(nom\u enfant:chararray)}}
结果是:
(1,{( enfant_2_1 ),( enfant_1_1 ),( enfant_3_1 )})
(2,{( enfant_2_2 )})
(3,{( enfant_2_3 )})
我试着压扁“儿童”。。。但结果是每个孩子都有一个lign。。。我玩元组和袋子有些困难,你能帮我吗?
提前谢谢,
编辑:我找到了一个解决我的问题和更多^^^见下文
安吉利克
1条答案
按热度按时间pu82cl6c1#
最后,我找到了解决方案,它适用于child的更多字段:(id、name、age)。
-- 1. 加载这两个文件
donnees_enfants=load'/user/cloudera/jeuxDenormalization/jeux/mini_jeu2.csv'使用pigstorage(';')as(id:int,nom)_enfant:chararray);
donnees_parents=load'/user/cloudera/jeuxDenormalization/jeux/mini_jeu1.csv'使用pigstorage(';')作为(id_parent:int,标称_parent:chararray,prenom公司_parent:chararray);
-- 2. 将文件与左边的外部连接起来,以保留没有孩子的客户。
非规范化=按id加入donnees\u parents\u parents left outer,按id加入donnees\u enfants;
-- 3. groupby在customer上设置为只有一行by customer
unparent\u parligne=按(id\u parent、nom\u parent、prenom\u parent)进行组反规范化;
-- 4. 将行展平:
ligne_finale=foreach unparange_parligne generate flatten(group),flatten(bagtotuple(反规范化(donnees_enfants::nom_enfant,donnees_enfants::age));
或者如果有更多字段(带有“donnees\u enfants::age”):
-- 5. 使用org.apache.pig.piggybank.storage.pigstorageschema(“;”)将数据存储在csv文件store ligne\u finale中“/user/cloudera/jeuxdenormalisation/resultats/test4”;