在 Pig 脚本中获取意外符号

Posted

技术标签:

【中文标题】在 Pig 脚本中获取意外符号【英文标题】:Getting unexpected symbol in Pig script 【发布时间】:2014-09-19 08:24:39 【问题描述】:

我正在使用 pig 读取文件并希望将这些数据传递给 java 方法并计算记录。但是我得到了异常,请帮助我为什么会得到这个异常

REGISTER /user/rakeshar/test.jar
DEFINE Test com.msdw.rakesh.Test;
 temperature = LOAD 'NYQ_MWDATA_ge2_fact.csv' USING PigStorage(',') AS (period_fundmtls_id:int, metric_def_id:int, real_value:double, currency_unit_id:int, observation_type_cd:chararray, non_currency_unit_id:int);
return_val = com.msdw.rakesh.Test(temperature);
DUMP return_val;

在上面的代码中,我在第 4 行遇到错误,下面是异常

557506 [main] ERROR org.apache.pig.tools.grunt.Grunt  - Failed to parse: <line 3, column 0>  Syntax error, unexpected symbol at or near 'return_val'
    at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:235)

请在这里帮助我,因为我是 hadoop 和 pig 的新手。

【问题讨论】:

【参考方案1】:

你必须做一个投影才能调用这样的 UDF:

return_val = FOREACH temperature GENERATE com.msdw.rakesh.Test(*);

如果你想做一些像temperature中的记录总数这样的操作

X = GROUP temperature ALL;
return_val = FOREACH XGENERATE com.msdw.rakesh.Test(temperature);

你可能知道,pig 中已经有了 count 功能。此外,您还需要考虑可扩展性。见这里http://chimera.labs.oreilly.com/books/1234000001811/ch10.html

【讨论】:

根据我的理解,如果我按照您的建议进行上述操作,将为每一行调用测试,但我需要通过温度中收集的所有行并获取行数,或任何类似的操作,这可能吗?

以上是关于在 Pig 脚本中获取意外符号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PIG 中获取当前时间戳

错误 1200:意外符号?

我可以在 Pig 脚本中将参数传递给 UDF 吗?

在 Pig 中以 yyyy-mm-dd 格式获取今天的日期

如何获取 Pig Script 中的最后一个元素

Hadoop Pig GROUP by id,获取 owner_id?