2013-10-13 1 views
3

Я хотел бы вычислить очень большие файлы JSON (около 400 МБ каждый) в Scala.Библиотека JSON в Scala и распределение вычислений

Мой прецедент - пакетная обработка. В тот же момент я могу получить несколько очень больших файлов (до 20 ГБ, затем вырезать для обработки), и я действительно хочу быстро их обрабатывать как очередь (но это не тема этого сообщения!). Поэтому речь идет о распределенной архитектуре и проблемах производительности.

Мой формат файла 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

Учитывая сценарий без искры, я бы посоветовал течь JSON с Джексоном Streaming (Java) (смотри, например, there), отобразить каждый объект JSON в случае класса Scala и отправить их до Akka router с несколькими маршрутами, которые выполняют часть преобразования параллельно.

Смежные вопросы