2014-05-22 119 views
1

我有一些JSON输入,我需要解析和处理(这是我第一次使用JSON)。我输入如下:解析JSON嵌套输入Scalding

{"id":"id2","v":2, "d":{"Location":"JPN"}) 
{"id":"id1","v":1, "d":{"Location":"USA"}} 
{"id":"id2","v":1, "d":{"Location":"JPN"}} 
{"id":"id1","v":2, "d":{"Location":"USA"}} 

我的目标是编写一个滚烫的脚本,通过组位置字段和输出的计数输入。所以在上面的例子中,“JPN”和“USA”的计数应该是2。 Scalding提供了一个名为JsonLine的类。我的脚本如下:

class ParseJsonLine(args: Args) extends Job(args) { 

    JsonLine(args("input"), ('id, 'v, 'd)).read 
    .groupBy('d){_.size} 
    .write(args("output")) 
} 

上面的代码编译好了,但在运行时生成以下错误:

Caused by: java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to java.lang.Comparable 

基本上,我不知道如何引用位置字段。 “d.Location”不起作用,而由复杂结构“d”分组会产生上述的错误。 我没有找到太多使用json的滚动输入分析的例子。另外,我不确定是否有比JsonLine更好的嵌套输入。

我将不胜感激您的帮助。

谢谢

回答