如何使用制表符中的制表符分隔符加载字符串数组

时间:2016-02-25 18:35:00

标签: apache-pig

我有一个带制表符分隔符的文本文件,我正在尝试将第一列打印为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列中的第一个值(即名称)。

对此有何解决方案?

1 个答案:

答案 0 :(得分:0)

我有一个解决方案:

在加载中使用PigStorage('\ t')时,该文件应具有制表符分隔符。因此,创建了许多coloumns(+1)的行中使用的制表符数。这是它的工作原理。 但你有一个技巧 您可以更改默认分隔符并使用其他分隔符来加载文件,如逗号,然后您可以使用逗号分隔名称。 它肯定会起作用 输入文件样本

1,A B
2,C D   E   F
3,G
4,H I   J   K   L   M

希望这有帮助