У меня есть набор точек данных, каждая из которых описывается словарем. Обработка каждой точки данных является независимой, и я отправляю каждую из них как отдельную работу в кластер. Каждая точка данных имеет уникальное имя, и моя оболочка представления кластера просто вызывает скрипт, который берет имя точки данных и файл, описывающий все точки данных. Затем этот сценарий обращается к точке данных из файла и выполняет вычисления.
Поскольку каждое задание должно загружать набор всех точек только для получения точки, которую нужно выполнить, я хотел оптимизировать этот шаг, сериализовав файл, описывающий набор точек, в легко извлекаемый формат.
Я попытался использовать JSONpickle, используя следующий метод, для сериализации словаря, описывающего все точки данных в файле:
def json_serialize(obj, filename, use_jsonpickle=True):
f = open(filename, 'w')
if use_jsonpickle:
import jsonpickle
json_obj = jsonpickle.encode(obj)
f.write(json_obj)
else:
simplejson.dump(obj, f, indent=1)
f.close()
Словарь содержит очень простые объекты (списки, строки, числа с плавающей запятой и т. Д.) И имеет в общей сложности 54 000 ключей. Размер файла json составляет ~ 20 мегабайт.
Загрузка этого файла в память занимает ~ 20 секунд, что мне кажется очень медленным. Я переключился на использование pickle с тем же самым объектом и обнаружил, что он генерирует файл размером около 7,8 мегабайт и может быть загружен за ~ 1-2 секунды. Это значительное улучшение, но все равно кажется, что загрузка небольшого объекта (менее 100 000 записей) должна быть быстрее. Кроме того, рассол не читается человеком, что было для меня большим преимуществом JSON.
Есть ли способ использовать JSON для получения аналогичных или лучших ускорений? Если нет, у вас есть другие идеи по структурированию?
(Является ли правильным решением просто «нарезать» файл, описывающий каждое событие, в отдельный файл и передать его в сценарий, выполняющий точку данных в кластерном задании? Похоже, это может привести к увеличению количества файлов ).
спасибо.