我有这样一个记录:
{(Larry Page),23,M}
{(Suman Dey),22,M}
{(Palani Pratap),25,M}
我正在努力 LOAD
使用以下命令的记录:
records = LOAD '~/Documents/PigBag.txt' AS (details:BAG{name:tuple(fullname:chararray),age:int,gender:chararray});
但我得到了一个错误:
2015-02-04 20:09:41,556 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 7, column 101> mismatched input ',' expecting RIGHT_CURLY
请给我建议。
2条答案
按热度按时间sqyvllje1#
它不是一个袋子,因为它不是由元组组成的。尝试
出于某种原因,pig用花括号将一行的输出包起来,使它看起来像一个包,但实际上不是。如果使用pigstorage保存了此数据,则可以使用参数('-schema')保存它,该参数告诉pigstorage创建一个架构文件.pigschema(或类似文件),您可以查看该文件以查看保存的架构是什么。当使用pigstorage加载时,也可以使用它来保存as子句。
vlurs2pr2#
对
LiMuBei
这一点绝对正确。您的输入格式不正确。Pig总是希望袋子能装得下collection of tuples
但你的情况是collection of (tuple and fields)
. 在这种情况下,Pig会retain the tuple
以及reject the fields
(年龄和性别)。但是这个问题可以用不同的方法很容易地解决(一种黑客的解决方案)。
1将每个输入行作为字符加载。
2从输入中删除花括号和函数括号。
三。使用strsplit函数将输入分隔为(姓名、年龄、性别)字段。
Pig手稿:
输出:
现在您可以使用
fullname,age,sex
.