Попытка загрузить большую округ Лос-Анджелес - не хватает памяти - PullRequest
0 голосов
/ 06 декабря 2018

Я использую коллекцию пакетов Python, установленных в Docker-контейнере;OSMnx для загрузки данных OSM, а затем networkx для выполнения анализа - я доказал свой код на небольшом подмножестве данных и теперь хочу перейти к масштабу.

Я пытаюсь провести некоторый анализ пригородных поездов в округе Лос-Анджелеса - чтобы сделать это, мне нужно захватить улицы, простирающиеся несколько дальше границы округа, потому что мы позволяем людям ездить из Лос-Анджелеса в другие округа.Первым делом я хотел захватить Калифорнию, а затем обрезать ее через многоугольник с буферизацией в округе - после нескольких часов работы мой контейнер уничтожил процесс Python.Итак, я подумал, что я бы сократил загрузку до всего лишь коробки, используя этот код - даже это не удается в методе graph_from_bbox.Я подготовил свой док-контейнер с 8 ГБ памяти.

greater_la_streets_box = ox.graph_from_bbox(35.114, 33.514, -117.439, -119.316, 
   network_type='drive', simplify=False,
   timeout=3600)
G_projected = ox.project_graph(greater_la_streets_box)
ox.save_graph_shapefile(G_projected, filename='greater_la_streets',
                    folder='/ds/data/spatial/network/streets/CA/')

Разумно ли, что для обработки потребуется 8 ГБ памяти?Если я правильно прочитал мою статистику док-станции, сетевой ввод-вывод загружается всего ~ 36 МБ, а использование памяти быстро достигает 8 ГБ и в конечном итоге приводит к сбою процесса Python.Существуют способы обойти сбой процесса - меня интересует производительность и существуют ли более эффективные способы использования OSMnx для загрузки данных OSM?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Округ Лос-Анджелес - территория для учебы умеренно большая, но я только что проверил на своем ноутбуке (8 Гб оперативной памяти), и он отлично загрузил / построил график.Независимо от этого, OSMnx загружает необработанные данные OpenStreetMap и затем создает их в MultiDiGraph NetworkX.NetworkX предлагает операторам объединять графики, например, с помощью операции объединения (см. Функцию compose: https://networkx.github.io/documentation/stable/reference/algorithms/operators.html).

. Вы можете выполнить эту операцию в виде кусков, а затем объединить графики в конце. Или вы можете использоватьболее грубое представление графика, как предлагает @Isfand. Или вы можете выделить больше оперативной памяти локально.

Мне также не нравится, как save_graph_shapefile организует результаты

Новые запросы функцийвсегда приветствуются как проблемы на GitHub с предложениями по изменению функциональности OSMnx.

0 голосов
/ 07 декабря 2018

Вы можете сделать так, чтобы он занимал меньше памяти, используя более грубое графическое представление. Это можно сделать с помощью параметра 'infrastucture'.

greater_la_streets_box = ox.graph_from_bbox(35.114, 33.514, -117.439, -119.316, 
   network_type='drive', simplify=False,timeout=3600,
   infrastructure='way["highway"~"motorway|trunk|primary"]')

приведенная ниже ссылка предоставляет больше информации о выборе дополнительных опций для способаключевое слово в инфраструктуре https://wiki.openstreetmap.org/wiki/Key:highway

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...