如何阅读Pig中的行李列表?

Ben*_*enH 3 apache-pig

如何阅读Pig中的行李列表?

我试过了:

grunt> cat sample.txt
{a,b},{},{c,d}
grunt> data = LOAD 'sample.txt' AS (a:bag{}, b:bag{}, c:bag{});
grunt> DUMP data
({},,)
Run Code Online (Sandbox Code Playgroud)

reo*_*toa 6

将数据读入Pig的默认方法是PigStorage('\t')- 也就是说,它假定您的数据是以制表符分隔的.你的是逗号分隔的.所以你应该写LOAD 'sample.txt' USING PigStorage(',') AS....

但是,您的数据不是正确的Pig包格式.请记住,一个包是元组的集合.如果您无法预处理输入,则必须编写UDF来解析您给出的表单的输入.所以这应该工作:

grunt> cat tmp/data.txt
{(a),(b)},{},{(c),(d)}
grunt> data = LOAD 'tmp/data.txt' USING PigStorage(',') AS (a:bag{}, b:bag{}, c:bag{});
grunt> DUMP data;
(,,{})
Run Code Online (Sandbox Code Playgroud)

什么地方出了错?输入字段separator(,)与行李记录分隔符相同这一事实令Pig感到困惑.它分析你输入到田间地头{(a),(b)}{},这就是为什么只有第三场最终被一个袋子.这就是为什么你会看到像这样的警告信息Encountered Warning FIELD_DISCARDED_TYPE_CONVERSION_FAILED 2 time(s).

如果可以,尝试使用制表符或空格(或分号,或......)而不是逗号:

grunt> cat tmp/data.txt                                                                
{(a),(b)}       {}      {(c),(d)}
grunt> data = LOAD 'tmp/data.txt' AS (a:bag{}, b:bag{}, c:bag{});                      
grunt> DUMP data;
({(a),(b)},{},{(c),(d)})
Run Code Online (Sandbox Code Playgroud)