Использование json4s-нативной библиотеки в кластере Spark

Я пытаюсь обработать данные в кластере AWS EMR Spark. Для этого у меня есть приложение Scala, которое считывает необработанные данные JSON из S3, анализирует их в Map[String, Any] с помощью собственной библиотеки Scala scala.util.parsing.json.JSON и метода parseFull.

Затем у меня есть рекурсивная функция, которая выравнивает вложенный JSON (чтобы Map[String, Any] не содержала в себе никаких карт), а затем я хочу преобразовать его обратно в строку в формате JSON, чтобы создать объект Spark DataFrame.

Для анализа объекта Map в строку JSON я нашел это решение с помощью mohit.

К сожалению, у меня были некоторые проблемы с библиотекой org.json4s.native в моем IntelliJ, и она сказала, что она не может разрешить эту зависимость. (Оглядываясь назад, теперь я знаю, что это была проблема не обновлять проект после обновления файла.sbt с правильной зависимостью. Теперь в IntelliJ библиотека json4s.native и ее функции работают.)

Сначала я использовал org.json4s.jackson.Json. Но тогда

Json(DefaultFormats).write(m)

строка привела к строке, где целые числа были преобразованы в двойные числа, и это было неправильно.

Итак, я получил IntelliJ, работающий с библиотекой json4s.native, и результат преобразовал числа правильно.

Однако сейчас у меня проблемы с использованием этой библиотеки в кластере Spark. Если я собираю.jar локально, загружаю файл в S3, копирую его в кластер EMR и затем запускаю его с помощью spark-submit, я получаю следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json4s/native/Json$

И когда я просто пытаюсь импортировать эту библиотеку из оболочки оболочки, я просто получаю ответ, что эта зависимость не может быть разрешена.

Я попробовал это предложение Эли Лещинского, пытаясь вручную поместить jar-файл json4s в кластер, но его предложенный файл / home / hadoop / lib не работает, так как / home / hadoop - это практически пустая папка, когда я захожу в hadoop @ blabla.compute.amazonaws.com.

Я обнаружил, что мои библиотеки могут быть найдены в папках / usr / lib или / usr / lib / hadoop / lib, но я скопировал туда файл jar, но мой собственный скрипт все равно не удался.

Итак, как я могу использовать библиотеку org.json4s.native в своем кластере Amazon EMR Spark?

(Spark версии 1.6 и я использую Scala версии 2.10.5 для совместимости с версией Spark)

1 ответ

Если у вас есть json4s в файле sbt или pom.xl, убедитесь, что версия совместима с искровым json, например, для искры 3.3.x эта версия работает: "org.json4s" %% "json4s-native" % "3.6.6 ",

Другие вопросы по тегам