LoginSignup
11
10

More than 5 years have passed since last update.

ScalaのJson Parserを「spray-json」に変えたら処理速度が36倍になった話

Last updated at Posted at 2016-08-16

仕事でEMR+Sparkを使って、いろいろなサービスが出すfluentdのログを整形していた時に、jsonのパースを変えたら処理速度が6時間→10分になった話

Jsonパーサーを変えようと思ったきっかけ

sparkが2.0.0になったので、scala2.10.xで組んでたやつをこの際に2.11.xにあげるか!というノリ

scala2.10.x → 2.11の乗り換えで
scala.util.parsing.jsonがdeprecatedになってしまうので、変えないとまずくなってしまった故

Jsonパーサー

結果、6時間かかっていたものが10分に短縮

環境的にはどちらもc4.x2largeをマスター、コア、タスク合わせて6台利用してました@EMR

導入方法(おまけ)

  • build.sbtへ追記
libraryDependencies ++= Seq(
  "io.spray" %%  "spray-json" % "1.2.6"
)
  • マッピングクラス、パーサークラスの準備
class Mapping(
    val hoge : String
    .......
    ......
    ...
)
object MappingProtocol {
    implicit object  MappingJsonFormat extends RootJsonFormat[Mapping] {

    override def read(json: JsValue): Mapping = {
        ...
        new Mapping

    }

    override def write(obj: Mapping): JsValue = {
        JsObject( ... )

    }

}

処理

import spray.json._
import さきほど準備したやつ

val json = """適当なjson"""
val jsonP = json.parseJson
val jsonC = jsonP.convertTo[Mapping]

2016/08/17 追記

@xuwei_k さんのご指摘でそもそも標準のパーサーは使っちゃいけないみたいです。他のものを使いましょう(戒め)

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10