我有许多包含一列值的csv文件:
File1:
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列/表。 我一直在尝试使用猪,但我是初学者,而且还在挣扎。
对于两个文件,我可以这样做:
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档玩具示例不会缩放。