Дельта-кодировщики: использование библиотеки Java в Scala

Мне нужно сравнить наборы данных для анализа больших данных на основе Spark (текстовые файлы), которые очень похожи (> 98%), но имеют очень большие размеры. Проведя некоторое исследование, я обнаружил, что наиболее эффективным способом может быть использование дельта-кодировщиков. С этим я могу иметь справочный текст и хранить другие как приращения дельты. Однако я использую Scala, не поддерживающий дельта-кодировщики, и совсем не знаком с Java. Но поскольку Scala совместима с Java, я знаю, что можно заставить библиотеку Java работать в Scala.

Я обнаружил, что многообещающими реализациями являются xdelta, vcdiff-java и bsdiff . Немного поискав, я нашел самую интересную библиотеку, dez. Ссылка также дает тесты, в которых он работает очень хорошо, а код можно использовать бесплатно и он выглядит легковесным.

На данный момент я застрял с использованием этой библиотеки в Scala (через sbt). Я был бы признателен за любые предложения или ссылки для преодоления этого барьера, будь то конкретно для этой проблемы (кодировщики delata), библиотеки или работы с Java API в целом в Scala. Конкретно мои вопросы:

  1. Есть ли библиотека Scala для дельта-кодировщиков, которую я могу использовать напрямую? (Если не)

  2. Возможно ли, что я помещу файлы классов /notzed.dez.jar в проект и позволю sbt предоставить API в коде Scala?

Я как бы застрял в этой трясине, и любой выход был бы очень признателен.


person Quiescent    schedule 23.10.2020    source источник


Ответы (1)


Есть несколько деталей, которые необходимо учитывать. Нет проблем в использовании непосредственно библиотек Java в Scala, либо в качестве зависимостей в sbt, либо в качестве неуправляемых зависимостей https://www.scala-sbt.org/1.x/docs/Library-Dependencies.html: зависимости в lib идут по всем путям к классам (для компиляции, тест, запуск и консоль). Вы можете создать толстую банку со своим кодом и зависимостями с помощью https://github.com/sbt/sbt-native-packager и распространил его с помощью Spark Submit.

Суть здесь в том, чтобы использовать эти фреймворки в Spark. Чтобы воспользоваться преимуществами Spark, вам нужно разделить файлы на блоки, чтобы распределить алгоритм по кластеру для одного файла. Или, если ваши файлы сжаты, и каждый из них находится в одном разделе hdfs, вам нужно будет настроить размер блоков hdfs и т. д.

Вы можете использовать модули C и включать их в свой проект и вызывать их через JNI, поскольку такие фреймворки, как фреймворки глубокого обучения, используют собственные функции линейной алгебры и т. д. Так что, по сути, есть много тем для обсуждения того, как реализовать эти дельта-алгоритмы. в Спарке.

person Emiliano Martinez    schedule 24.10.2020
comment
Спасибо. Я рассмотрю рекомендуемый подход. - person Quiescent; 26.10.2020