я работаю над графиками в GraphX. используя приведенный ниже код, я создал переменную для хранения соседей узлов в СДР:
val all_neighbors: VertexRDD[Array[VertexId]] = graph.collectNeighborIds(EdgeDirection.Either)
я использовал широковещательную переменную для широковещательной передачи соседей всем ведомым, используя следующий код:
val broadcastVar = all_neighbors.collect().toMap
val nvalues = sc.broadcast(broadcastVar)
Я хочу вычислить пересечение между соседями двух узлов. например, пересечение между узлами 1 и соседями узла 2.
Сначала я использую этот код для вычисления пересечения, которое использует переменную широковещания nvalues:
val common_neighbors=nvalues.value(1).intersect(nvalues.value(2))
, и как только я использовал приведенный ниже код для вычисление пересечения двух узлов:
val common_neighbors2=(all_neighbors.filter(x=>x._1==1)).intersection(all_neighbors.filter(x=>x._1==2))
Мой вопрос заключается в следующем: какой из перечисленных выше методов эффективен и более распределен и параллелен ? используя широковещательную переменную nvalue для вычисления пересечения или используя метод фильтрации RDD ?