Допустим, у меня есть большое количество графических файлов, и каждый граф имеет около 500 000 ребер. Я обрабатывал эти файлы графов в Apache Spark, и мне было интересно, как эффективно распараллелить всю работу по обработке графов. Поскольку на данный момент каждый файл графа независим от любого другого, я ищу параллелизм с файлами. Итак, если у меня есть 100 графических файлов и кластеры из 20 узлов, могу ли я обрабатывать каждый файл на каждом узле, чтобы каждый узел обрабатывал 5 файлов. Теперь то, что происходит, похоже на то, что один граф обрабатывается в несколько этапов, что вызывает много перетасовки.
graphFile = "/mnt/bucket/edges" #This directory has 100 graph files each file with around 500K edges
nodeFile = "/mnt/bucket/nodes" #This directory has node files
graphData = sc.textFile(graphFile).map(lambda line: line.split(" ")).flatMap(lambda edge: [(int(edge[0]),int(edge[1]))])
graphDataFrame = sqlContext.createDataFrame(graphData, ['src', 'dst']).withColumn("relationship", lit('edges')) # Dataframe created so as to work with Graphframes
nodeData = sc.textFile(nodeFile).map(lambda line: line.split("\s")).flatMap(lambda edge: [(int(edge[0]),)])
nodeDataFrame = sqlContext.createDataFrame(nodeData, ['id'])
graphGraphFrame = GraphFrame(nodeDataFrame, graphDataFrame)
connectedComponent = graphGraphFrame.connectedComponents()
Дело в том, что обработка даже пары файлов занимает много времени. И мне нужно обработать 20К файлов. Каждый файл имеет 800 тысяч ребер. Может быть, если удастся разработать стратегию разделения данных, которая гарантирует, что все зависимые ребра будут обрабатываться на одном узле, перетасовки будет меньше.
Или каков наилучший способ решить это эффективно?
input_file_name
, но я не думаю, что это сильно поможет вам с GraphX. . - person zero323   schedule 17.08.2016