我如何阅读在Pig袋列表?

v09wglhw  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(221)

我怎么看Pig的袋子清单?
我试过:

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

ajsxfq5m1#

将数据读入pig的默认方法是 PigStorage('\t') --也就是说,它假设您的数据是以制表符分隔的。你的是逗号分隔的。所以你应该写 LOAD 'sample.txt' USING PigStorage(',') AS... .
但是,您的数据不是正确的Pig袋格式。记住,包是元组的集合。如果不能预处理输入,则必须编写一个自定义项来解析给定表单的输入。所以这应该行得通:

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;
(,,{})

出什么事了?输入字段分隔符( , )是一样的袋记录分离器是混淆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)})

相关问题