Простое и эффективное решение для объединения Java, Python, PyTables и HDF5 - PullRequest
2 голосов
/ 18 января 2012

Я новичок в Python, PyTables и HDF5.Я ищу простое и лучшее решение для моей проблемы.

Проблема следующая.С одной стороны у меня много XML-файлов с данными.Я просто хочу разобрать эти файлы и поместить данные в файл hdf5 на другой стороне.Позже я буду использовать эти данные по некоторым критериям поиска. Почему HDF5?Потому что нужно поставить большой набор данных и потому, что скорость.Использование СУБД создаст проблемы с производительностью при операциях JOIN.Решение должно обеспечивать скорость и хорошую производительность памяти.

После некоторого поиска в Google я считаю Python и PyTables возможным решением.Моя идея состоит в том, чтобы анализировать данные из XML в Java (этот код должен быть написан на Java), после этого написать скрипт Python, который вставляет данные в hdf5 с использованием API PyTables и выполняет скрипт Python из Java.Итак, я пишу и выполняю скрипт Python из Java-программы.Для написания скрипта Python на Java я использую пакет java.io. * и для выполнения класса Process на Java.Например:

p.exec ("cmd / c C: \ MyScripts \ myscript.py")

Я не знаю, хорошо ли это решение.Для меня не круто писать скрипты из Java с использованием java.io. *.Возможно, позже у меня будут проблемы с чтением результатов из сценариев (когда я создаю некоторые критерии поиска с использованием сценариев Python и API PyTables).

Итак, у меня есть несколько вопросов по моей проблеме.Каково лучшее решение между анализом данных XML с одной стороны и хранением данных в формате hdf5 с другой стороны?Я на правильном пути с этим решением (написание и выполнение скриптов Python из кода Java)?А как насчет Python и PyTables?Являются ли эти технологии хорошим решением для моей проблемы?Также я прочитал несколько вещей о Jython, но я не знаю, возможно ли объединить его с PyTables?

Мнение и советы от профессионалов приветствуются.Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Для меня не круто писать скрипты из Java с использованием java.io.*.

То же самое и здесь - вы уже проанализировали данные из XML во некоторое внутреннее представление в Java, а затем переписали эти данные в скрипт Python, а затем интерпретатор Python повторно проанализирует данные во внутреннем представление для записи в файлы HDF5. Он связывает воедино как интерфейс синтаксического анализа Java XML, формат данных XML, так и API-интерфейсы Python для манипулирования файлами HDF5, что звучит как более подвижные части, чем должно быть. (Вы действительно хотите прорваться javac просто для того, чтобы обновить переименованный пакет Python?)

Я думаю, что стоило бы сделать еще один шаг назад и взглянуть на два шага проблемы:

  • разбирать XML
  • запись HDF5

Нет причин, по которым между ними должно быть два языка - я бы целиком придерживался Java или исключительно Python. Конечный результат будет выполняться быстрее при меньшем объеме памяти в большем количестве систем и будет более удобен в обслуживании независимо от того, какой язык вы выберете.

2 голосов
/ 19 января 2012

Я работал над проектом, где я проанализировал около 60 000 файлов Python cPickle и поместил содержимое (матрица из приблизительно 31 тыс. Строк и 4 столбца) в отдельные таблицы PyTables.Он работает и работает очень хорошо.

Но я согласен с Сарнольдом.Я бы придерживался java или python, что бы у вас ни было больше всего опыта и с чем вам удобнее всего.Я думаю, что легче получить результаты с помощью Python и Pytables, особенно при написании сценариев импорта.

Кстати, по какой причине вы хотите запускать скрипты Python из Java?Почему бы не запустить скрипт Python напрямую?

Кстати, есть также пакет python h5py , который более низкого уровня, чем PyTables.PyTables фактически создает дополнительный уровень абстракции поверх HDF5.Например, PyTables имеет концепцию таблиц, которая похожа на таблицы в RDBMS и поддерживает индексы (оба не поддерживаются HDF5 из коробки)

Теоретически вы можете читать файлы HDF5, созданные с помощью PyTables из Java,Однако вы не получаете из коробки поддержки всех функций PyTable, таких как таблицы и индексы.
В дополнение к этому, если вы используете алгоритм сжатия Blosc в PyTables, вы не сможете загрузитьэто на яве вообще.

...