我有一个带制表符分隔符的文本文件,我正在尝试将第一列打印为id,将剩余字符串数组打印为第二列名称。
下面考虑要加载的文件:
cat file.txt;
1 A B
2 C D E F
3 G
4 H I J K L M
在上面的文件中,第一列是id,其余是名称。
我应该得到如下输出:
id names
1 A,B
2 C,D,E,F
3 G
4 H,I,J,K,L,M
如果使用分隔符,
拆分名称,那么我将使用以下命令获取输出:
test = load '/tmp/arr' using PigStorage('\t') as (id:int,names:chararray)
btest = FOREACH test GENERATE id, FLATTEN(TOBAG(STRSPLIT(name,','))) as value:tuple(name:CHARARRAY);
但是对于带有分隔符('\t')
的数组,我没有得到它们,因为它只考虑第2列中的第一个值(即名称)。
对此有何解决方案?
答案 0 :(得分:0)
我有一个解决方案:
在加载中使用PigStorage('\ t')时,该文件应具有制表符分隔符。因此,创建了许多coloumns(+1)的行中使用的制表符数。这是它的工作原理。 但你有一个技巧 您可以更改默认分隔符并使用其他分隔符来加载文件,如逗号,然后您可以使用逗号分隔名称。 它肯定会起作用 输入文件样本
1,A B
2,C D E F
3,G
4,H I J K L M
希望这有帮助