首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scalding中解析JSON嵌套输入

在Scalding中解析JSON嵌套输入
EN

Stack Overflow用户
提问于 2014-05-23 07:34:45
回答 1查看 790关注 0票数 1

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

代码语言:javascript
复制
{"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"}}

我的目标是编写一个scalding脚本,根据位置字段对输入进行分组,并输出计数。因此,在上面的示例中,"JPN“和"USA”的计数应该分别为2。Scalding提供了一个名为JsonLine的类。我的脚本如下:

代码语言:javascript
复制
class ParseJsonLine(args: Args) extends Job(args) { 

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

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

代码语言:javascript
复制
Caused by: java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to java.lang.Comparable

基本上,我不确定如何引用Location字段。"d.Location“不起作用,按复杂结构"d”分组会产生上述错误。我没有找到太多使用json在scalding中进行嵌套输入解析的示例。此外,我不确定是否有比JsonLine更好的嵌套输入。

我将非常感谢你的帮助。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-07-29 01:22:34

也许是使用符号?

看一下单元测试:https://github.com/twitter/scalding/blob/0.11.0/scalding-json/src/test/scala/com/twitter/scalding/JsonLineTest.scala

代码语言:javascript
复制
 JsonLine(args("input"), ('id, 'v, Symbol("d.Location"))).read
    .groupBy(Symbol("d.Location")){_.size}
    .write(args("output"))

注意:这里是学习者,所以可以随意即兴修改/更正/教育。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23818774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档