Разработчик построил графовый map-reduce на Apache DataFusion, полностью переложив данные на диск и заточив алгоритмы под массовое последовательное сканирование — никакого случайного доступа. DataFusion берёт на себя всю тяжёлую работу: управляет вытеснением при нехватке памяти через spillover, проводит sort-merge joins и агрегации, строит план и исполняет запрос. Пользовательский код остаётся очень лёгким. Проверку устроили жёсткую: запуск через systemd-run с предельным лимитом RAM, и решение выдержало тест.
Без шероховатостей не обошлось. В экстремальных сценариях FairSpillPool регулярно упирается в deadlock, а заставить sort-merge join (SMJ) учитывать, что данные на диске уже отсортированы, пока не удалось — это могло бы срезать время. Но ключевое — всё работает. PageRank на ориентированном графе graph500-26 из набора Graphalytics с миллиардом рёбер считается с расходом всего 5 ГБ памяти. А на графе twitter_mpi из того же набора с двумя миллиардами рёбер метод находит все слабосвязные компоненты, укладываясь в 10 ГБ.
Ни NetworkX, ни Igraph на такое не способны — им нужен граф, полностью помещающийся в RAM. Раньше автор был убеждён, что для графовой аналитики миллиардного масштаба не обойтись без Apache Spark и GraphFrames. Теперь он считает, что хватит и обычного ноутбука, и полностью пересмотрел своё старое скептическое мнение о применении Apache DataFusion в графовых задачах.