2016-02-19 5 views
1

Я работаю над приложением, использующим Python (3.4) и PyQt. Цель программы - управлять и анализировать большой объем данных - до ~ 50 двоичных файлов, которые могут иметь общий размер до 2-3 ГБ. Когда я пытался загрузить пару файлов в программу, он перестает отвечать на запросы во время загрузки, а затем занимает ~ 1,5 ГБ оперативной памяти только для продолжения работы. Мой вопрос довольно общий - каковы возможные методы в python/PyQt для обработки таких наборов данных?Python - управление большими данными

+2

Это невозможно ответить. Только очень общее предложение: разложите свою программу и создайте вычислительное ядро ​​без каких-либо (Py) Qt, которые обрабатывают ваши 50 файлов. Пусть он работает, посмотрим, как он себя ведет, оптимизируйте. Затем подключите его к вашему GUI-приложению. Кроме того, с этими размерами процесса убедитесь, что вы используете 64-битный питон. – deets

+0

Нет, я ценю комментарий. Я не ищу «исправление» или что-то в этом роде, просто некоторые предложения по рассмотрению и попытке реализовать, так что спасибо –

+0

Предполагая, что файлы несжаты, объем дискового пространства и объем памяти будут одинаковыми для эффективных двоичных представлений , Какой анализ вы делаете, и как вы загружаете файлы? Большинство анализов можно сделать потоковым способом. Один из вариантов - загрузить один файл за раз и извлечь необходимую информацию для агрегации, только сохраняя это в памяти. – Mack

ответ

1

Вы могли бы рассмотреть формат hdf5, который может получить доступ с помощью h5py, pytables или другие пакеты питона. В зависимости от формата данных HDF5 позволяет вам эффективно получать доступ к данным на HD, что на практике означает, что вы можете сэкономить память. Недостатком является то, что это требует определенных усилий на вашей стороне в качестве программиста.

1

@deets получил это право ... разложите проблему.

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

Мое приложение делится на

a) remote sources -> Collection Subsystem -> Bulkstore 
b) Bulkstore  -> BatchAnalysis   -> dyanmicstore 
c) dynamicstore -> webapp+visualization -> UI 

Система сбора непрерывно собирать журналы с разных языков 30+, разбора XML и добавления строк в одном языке bulkstore HDF5 файл.

Размер bulkstore зависит от языка ... от 20G до < 1M ...

batchanalysis ('вычислительное ядро' @deets) предназначен для использования новейших ~ 12M события (память связанно) ,

Ключевым моментом является научиться структурировать объемный магазин ... в моем случае я делят массовый магазин на кварталы, указав главный индекс на все кварталы. Эти услуги подразделяются на следующие иерархии классов:

bulkstore (core HDF services) 
+- dataset (manage datasets/directory within HDF) 
    +- appdata  (my apps knowledge of logs across the datasets) 
     +- dynamicstore (output of batchanalysis are HDF's themselves) 

Надеется, что это помогает ...

1 наконечник ... есть трюк для управления наборами данными в пределах HDF ... то есть. HDF с большими данными занимает время LONG, чтобы получить каталог наборов данных.

Если вам нужно обработать заинтересованы в создании Спарк решения для BatchAnalysis ...