Apache pig 我如何阅读猪的袋子清单?

Apache pig 我如何阅读猪的袋子清单?,apache-pig,Apache Pig,我如何阅读猪的袋子清单 我试过: grunt> cat sample.txt {a,b},{},{c,d} grunt> data = LOAD 'sample.txt' AS (a:bag{}, b:bag{}, c:bag{}); grunt> DUMP data ({},,) 将数据读入Pig的默认方法是PigStorage('\t')——也就是说,它假定数据是以制表符分隔的。你的是逗号分隔的。因此,您应该使用PigStorage(',')编写加载'sample.txt

我如何阅读猪的袋子清单

我试过:

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

将数据读入Pig的默认方法是
PigStorage('\t')
——也就是说,它假定数据是以制表符分隔的。你的是逗号分隔的。因此,您应该使用PigStorage(',')编写
加载'sample.txt',作为…

但是,您的数据格式不正确。记住,包是元组的集合。如果无法预处理输入,则必须编写UDF来解析给定表单的输入。所以这应该是可行的:

出了什么问题?输入字段分隔符(
)与行李记录分隔符相同这一事实令人困惑。它将您的输入解析到字段
{(a)
(b)}
{}
,这就是为什么只有第三个字段是一个包。这就是为什么您会看到一条警告消息,如
遇到警告字段\u丢弃\u类型\u转换\u失败2次

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

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)})
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)})