ScalaのJson Parserを「spray-json」に変えたら処理速度が36倍になった話
仕事で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パーサー
-
改善前
- scalaにデフォルトで用意されているパーサー http://www.scala-lang.org/api/2.7.6/scala/util/parsing/json/JSON$object.html
-
改善後
結果、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 さんのご指摘でそもそも標準のパーサーは使っちゃいけないみたいです。他のものを使いましょう(戒め)
Author And Source
この問題について(ScalaのJson Parserを「spray-json」に変えたら処理速度が36倍になった話), 我々は、より多くの情報をここで見つけました https://qiita.com/RyujiKawazoe/items/86f2fdb76ef8d2e4aaed著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .