2013-10-13 50 views
3

我想在Scala中計算非常大的JSON文件(每個大約400 MB)。Scala中的JSON庫和計算分配

我的用例是批處理。我可以在同一時刻收到幾個非常大的文件(高達20 GB,然後剪切以進行處理),我真的很想將它們作爲一個隊列快速處理(但它不是本文的主題!)。所以它確實是關於分佈式架構和性能問題。

我的JSON文件格式是一個對象數組,每個JSON對象至少包含20個字段。我的流程由兩個主要步驟組成。第一個是將JSON對象映射到Scala對象。第二步是我對Scala對象數據進行的一些轉換。

爲了避免加載內存中的所有文件,我想要一個解析庫,我可以有增量解析。有很多庫(Play-JSON,Jerkson,Lift-JSON,內置scala.util.parsing.json.JSON,Gson),我無法弄清楚需要採取哪種方法,並要求最小化依賴關係。

  • 你有什麼想法的圖書館我可以使用大容量解析與良好的表現?

此外,我正在尋找一種方法來並行處理JSON文件的映射和在字段(幾個節點之間)上進行的轉換。

  • 您認爲我可以使用Apache Spark來做到嗎?還是有其他的方法來加速/分配映射/轉換?

感謝您的幫助。

最好的問候,托馬斯

+0

也許[使用像Spark這樣的工具是一個巨大的矯枉過正](http://www.chrisstucchio.com/blog/2013/hadoop_hatred.html)。 –

+0

另請參閱http://stackoverflow.com/questions/8898353/parsing-a-large-30mb-json-file-with-net-liftweb-json-or-scala-util-parsing-jso –

+0

這可能值得指出'scala.util.parsing.json.JSON'已被棄用;我猜主要是因爲它最初是作爲解析器組合器的演示實現的。 –

回答

0

考慮沒有火花的情況下,我會建議流與傑克遜流(JAVA)的JSON(參見例如there),每個JSON對象映射到Scala的case類,並將它們發送到一個Akka router與幾個路線,並行做轉換部分。