pig拉丁语:加载一个非常简单的包

xhv8bpkk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(403)

我写这篇文章是因为今天我遇到了一个我无法解决的问题,尽管我到处搜索,尝试了很多不同的说法。我有这个输入文件:

3 {(car pen house glass)}
5 {(battery phone)}
6 {(the)}

(我想澄清一下,我在原始文件中添加了“(”和“)”,因为它们丢失了)。我的目标就是将这个文件(使用load)加载到一个变量中并转储它(使用dump)。
我在下面展示了我所做的尝试及其相对转储输出:

wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{(s:chararray)});

(3,)
(5,)
(6,{(the)})

wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:tuple(s:chararray));

(3,)
(5,)
(6,(the))

wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{item:tuple(s:chararray)});

(3,)
(5,)
(6,{(the)})

你有办法解决吗?
提前谢谢。

mqkwyuun

mqkwyuun1#

这里的问题是您使用“”作为分隔符,并且包包含“”。解决方法是将记录加载到一行中,然后使用strsplit将该行拆分为两个字段。

wc = LOAD 'input.txt' AS (line:chararray);
wc_new = FOREACH wc GENERATE STRSPLIT(line,' ',2);
DUMP wc_new;

相关问题