Я использую Spark / GraphFrames из Python и R. Когда я вызываю PageRank на небольшом графике из Python, это происходит намного медленнее, чем в R. Почему это намного медленнее с Python, учитывая, что обаPython и R вызывают одни и те же библиотеки?
Я попытаюсь продемонстрировать проблему ниже.
Spark / GraphFrames включает примеры графиков, таких как friends , как описано на этой ссылке .Это очень маленький ориентированный граф с 6 узлами и 8 ребрами (обратите внимание, что пример отличается от других версий GraphFrames).
Когда я запускаю следующий фрагмент кода с помощью R, вычисление PageRank занимает почти не время:
library(graphframes)
library(sparklyr)
library(dplyr)
nodes <- read.csv('nodes.csv')
edges <- read.csv('edges.csv')
sc <- spark_connect(master = "local", version = "2.1.1")
nodes_tbl <- copy_to(sc, nodes)
edges_tbl <- copy_to(sc, edges)
graph <- gf_graphframe(nodes_tbl, edges_tbl)
ranks <- gf_pagerank(graph, reset_probability = 0.15, tol = 0.01)
print(ranks$vertices)
results <- as.data.frame(ranks$vertices)
results <- arrange(results, id)
results$pagerank <- results$pagerank / sum(results$pagerank)
print(results)
Когда я запускаю эквивалент с PySpark, это занимает от 10 до 30 минут:
from pyspark.sql import SparkSession
from graphframes.examples import Graphs
if __name__ == '__main__':
sc = SparkSession.builder.master("local").getOrCreate()
g = Graphs(sc).friends()
results = g.pageRank(resetProbability=0.15, tol=0.01)
results.vertices.select("id", "pagerank").show()
results.edges.select("src", "dst", "weight").show()
Я пытался привести разные версии Spark и GraphFrames для Python в соответствие с настройками R.