我有许多csv文件,其中包含一列值:
文件1:
ID|V1
1111|101
4444|101
文件2:
ID|V2
2222|102
4444|102
文件3:
ID|V3
3333|103
4444|103
我想把这些结合起来得到:
ID|V1|V2|V3
1111|101||
2222||102|
3333|||103
4444|101|102|103
有许多(1亿)行,大约有100列/表。我一直在尝试用Pig,但我是一个初学者,正在努力。
对于两个文件,我可以:
s1 = load 'file1.psv' using PigStorage('|') as (ID,V1);
s2 = load 'file2.psv' using PigStorage('|') as (ID,V2);
cg = cogroup s1 by ID, s2 by ID
merged = foreach cg generate group, flatten((IsEmpty(s1) ? null : s1.V1)), flatten((IsEmpty(s2) ? null : s2.V2));
但是我想对任何文件都这样做,最多100个左右,而且我不认为我可以在没有内存耗尽的情况下组合这么多大的文件。因此,我宁愿从标题中获取列名,而不只是硬编码。换言之,这个2文件玩具的例子并不适用。
暂无答案!
目前还没有任何答案,快来回答吧!