ElephantBird UDF:json字段上的ORDER BY会生成语法错误

时间:2014-10-01 05:21:38

标签: apache-pig elephantbird

我在Hadoop 1.2.1上使用Pig 0.13.0。为了处理JSON文件,我也使用了ElephantBird UDF 4.5版。到目前为止我没有UDF的大问题但是当我试图通过json字段命令别名时,猪编译器不是很高兴,我得到以下错误:

Failed to parse: <file find.pig, line 13, column 35>  Syntax error, unexpected symbol at or near 'long'

脚本如下所示(查看ORDER语句):

...
records = LOAD '$INPUT' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map[]);
sorted_records = ORDER records BY (long)json#'imp' desc;
...

我尝试删除(长期),但无济于事。

1 个答案:

答案 0 :(得分:1)

您无法按JsonLoader返回的地图中的值订购记录,也无法在order by中进行类型转换。您可以做的是将json#'imp'的值投射到记录中的字段然后按以下顺序排序:

records = FOREACH records GENERATE json, (long)json#'imp' AS imp:long;
sortedrecords = ORDER records BY imp desc;