Это из-за того, что вы используете фрейм данных Panda. Он использует намного больше памяти для хранения CSV, чем размер самого файла. Вы можете проверить, сколько памяти требуется фрейму данных с помощью df.info(memory_usage='deep')
.
Если вам просто нужно преобразовать CSV в JSON, лучше использовать модули stdlib csv
и json
и кодировать их самостоятельно.
Вы обращаетесь к массиву judy. Это был проект HP. Я думаю, что они используются в рубине и доступны в c. Очень интересная структура данных. Использование того, что выделения являются (по крайней мере), выровненным словом, имея отдельные структуры для плотных и редких диапазонов.
Очень компактная структура данных была бы фильтром цветка, возможно, фильтром цветка подсчета для поддержки удалений.
http://en.wikipedia.org/wiki/Bloom_filter
Фильтр Bloom, задуманный Burton H. Bloom в 1970, является эффективной пространством вероятностной структурой данных, которая используется, чтобы протестировать, является ли элемент членом набора. Ложные положительные стороны являются возможными, но ложными отрицательными сторонами, не. Элементы могут быть добавлены к набору, но не удалены (хотя это может быть обращено с фильтром подсчета),
Если все, в чем Вы нуждаетесь, является вставкой, удалением и тестом для членства, то хеш-таблица должна подойти Вам приятно. Можно найти некоторые хорошие хеш-функции для хеширования 32-разрядных целых чисел здесь.
Если Вы хотите структуру, меньшую, чем набор данных, чем необходимо, вероятно, посмотреть на некоторое древовидное расположение. Сделайте каждый уровень 4 способов, которыми дерево выключает 2 бита, запускающиеся на верхнем уровне, и это могло бы уплотнить вполне хорошо (если указатели имеют какую-либо степень пространственной местности). Прием закодировал бы его сжато достаточно (индексы в массивы узлов? массив отобразил дерево?).