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