【问题标题】:Pig script filter a file getting ERROR猪脚本过滤文件得到错误
【发布时间】:2016-09-10 08:17:28
【问题描述】:

我是猪新手。我正在尝试过滤文本文件并将其存储在 hbase 中。这是示例输入文件

sample.txt

{"pattern":"google_1473491793_265244074740","tweets":[{"tweet::created_at":"18:47:31 ","tweet::id":"252479809098223616","tweet::user_id":"450990391","tweet::text":"rt @joey7barton: ..give a google about whether the americans wins a ryder cup. i mean surely he has slightly more important matters. #fami ..."}]}
{"pattern":"facebook_1473491793_265244074740","tweets":[{"tweet::created_at":"11:33:16 ","tweet::id":"252370526411051008","tweet::user_id":"845912316","tweet::text":"@maarionymcmb facebook mere ta dit tu va resté chez toi dnc tu restes !"}]}

脚本:

data = load 'sample.txt' using JsonLoader('pattern:chararray, tweets:  bag {t1:tuple(tweet::created_at: chararray,tweet::id: chararray,tweet::user_id: chararray,tweet::text: chararray)}');
A = FILTER data BY pattern == 'google_*';
grouped = foreach (group A by pattern){tweets1 = foreach data generate tweets.(created_at),tweets.(id),tweets.(user_id),tweets.(text); generate group as pattern1,tweets1;}

但是分组运行时出现这个错误:

2016-09-10 13:38:52,995 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse: <line 41, column 57> expression is not a project expression: (Name: ScalarExpression) Type: null Uid: null)

【问题讨论】:

  • 1.你期望得到什么输出?是 (pattern,created_at,id,user_id,text),这是一个模式 + 每条记录一条推文吗? 2、过滤器乱了;只有 google_* 模式使用 A = FILTER data BY 模式匹配 'google_.*';不过,这不是您的异常的原因。
  • 感谢您的回复@patrungel。预期输出为(模式)({完成所有推文}。请您建议我如何获得这个。

标签: hadoop hbase apache-pig


【解决方案1】:

在嵌套中你不能引用'tweets',你需要'A'。请参阅下面的示例。

grouped = FOREACH (GROUP A BY pattern) {
GENERATE groups AS pattern, A.created_at, A.id, A.user_id, A.text;
};

【讨论】:

  • 为了使用给定的输入,来自关系 A 的推文应该首先被平面映射,因为目前它是一个推文包,尽管给定数据集中的每条记录在包中只有一个条目.
  • 是的,很好。我对输入数据格式没有给予足够的重视。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多