Сохранить график на диск, созданный из Spark GraphFrames

У меня есть около 1 ТБ данных, я сохранил эти данные в файлах вершин и краев для загрузки в Spark GraphFrame для создания графика и выполнения запросов мотива (поиска шаблона) на этом графике.

Для каждого пакета этот файл вершин и ребер объемом 1 ТБ необходимо загрузить в GraphFrame, чтобы создать граф и запросить его.

У меня проблема в том, что создание графика происходит медленно. Поэтому я хочу сохранить этот созданный график на S3/диск, чтобы в следующий раз я напрямую загружал этот график и выполнял на нем запросы, которые будут быстрыми. Есть ли способ сделать это, т.е. создать огромный граф с помощью графического фрейма, сохранить его на диске, а в следующий раз напрямую загрузить этот граф в графический фрейм и запросить его.


person AbhiK    schedule 20.06.2020    source источник
comment
Вы имеете в виду какой-то альтернативный способ сохранения вершин и ребер, как описано в документе? graphframes.github.io/graphframes/ документы/_сайт/   -  person mazaneicha    schedule 22.06.2020


Ответы (1)


Вы уверены, что медленная часть — это создание GraphFrame?

По моему опыту, создание объекта GraphFrame не очень медленное, извините. Но вычисление мотивов очень медленное, особенно если вам нужно вычислять длины более 10. Причина в том, что он выполняет самообъединение фреймов данных, созданных под капотом, как вы можете видеть из https://www.waitingforcode.com/apache-spark-graphframes/motifs-finding-graphframes/read.

Надеюсь это поможет

person Oscar Lopez M.    schedule 21.06.2020
comment
Я читал, что при загрузке графа из файлов вершин и egde, graphx/graphframes внутренне создает триплеты, а затем переходит к выполнению запроса. Чем больше набор данных, тем больше времени потребуется для создания триплетов. Таким образом, я подумал, что если я смогу хранить огромный график и загружать его позже только для запросов, я мог бы сэкономить некоторое время. - person AbhiK; 22.06.2020
comment
Что вы можете сделать, так это сохранить мотивы в виде выходных данных Graphframes и использовать последний шаг в качестве входных данных для второго раунда вычислений мотивов с этого этапа. Но это было бы настолько ручным и не очень эффективным. Поэтому я думаю, что вместо этого было бы лучше использовать базу данных графа, если длина велика, или другие пакеты, такие как networkX (на основе Python, но не использовать самосоединение в качестве графических фреймов) - person Oscar Lopez M.; 22.06.2020
comment
Лопес М. согласен с вами, обнаружил, что графические кадры - не лучший вариант для большого набора данных, сейчас я ищу базу данных графов. - person AbhiK; 23.06.2020
comment
@AbhiK Если вы считаете, что это хороший ответ, не могли бы вы отметить его как правильный ответ? Большое спасибо! - person Oscar Lopez M.; 13.07.2020