2015-09-16 16 views
6

Giả sử chúng tôi đã có đầu vào trong Apache GraphX ​​như:Nhận tất cả các nút kết nối với một nút trong Apache Spark GraphX ​​

Vertex RDD:

val vertexArray = Array(
    (1L, "Alice"), 
    (2L, "Bob"), 
    (3L, "Charlie"), 
    (4L, "David"), 
    (5L, "Ed"), 
    (6L, "Fran") 
) 

Cạnh RDD:

val edgeArray = Array(
    Edge(1L, 2L, 1), 
    Edge(2L, 3L, 1), 
    Edge(3L, 4L, 1), 
    Edge(5L, 6L, 1) 
) 

Tôi cần tất cả các thành phần được kết nối với một nút trong Apache Spark GraphX ​​

1,[1,2,3,4] 
5,[5,6] 
+0

OK, vì vậy chúng tôi hiểu những gì bạn cần. Bạn đã thử cái gì? Hay bạn đang mong đợi SO viết mã cho bạn? –

+0

Tôi không mong đợi mã nhưng chỉ phác thảo cơ bản cho nó.Và cho câu hỏi nếu nó là cần thiết để viết những thứ tôi đã cố gắng tôi nghĩ rằng nó sẽ làm cho câu hỏi một chút lộn xộn và không tối đa điểm. Đã thấy tài liệu tham khảo cho Spark GraphX ​​nhưng không thể có được giải pháp cho nó. –

+0

Ngoài ra còn có 'collectNeighbours' mà dường như làm những gì bạn cần: http://spark.apache.org/docs/latest/graphx-programming-guide.html#collecting-neighbors – dmitry

Trả lời

8

Bạn có thể sử dụng ConnectedComponents trả về

một đồ thị với giá trị đỉnh chứa id đỉnh thấp nhất trong thành phần kết nối có chứa đỉnh đó.

và định hình lại kết quả

graph.connectedComponents.vertices.map(_.swap).groupByKey 
+0

Nếu thay vì đồ thị là 6-> 5, 4-> 3-> 3-> 1, điều này sẽ tạo ra kết quả sai, tôi nghĩ vậy. Nó vẫn sẽ tạo ra kết quả tương tự và thay vào đó nó phải là (6, [5,6], 4, [1,2,3,4])? –

+0

Đây không phải là các thành phần được kết nối mạnh và sự lựa chọn của nhãn là tùy ý. Sử dụng id thấp nhất có ý nghĩa nên tôi không nghĩ có vấn đề ở đây. – zero323

+0

Nếu nhãn là đơn phương, có, đồng ý. Nếu OP muốn bắt đầu của đồ thị con thì có một vấn đề. Nhưng chỉ có OP mới biết điều này. –

Các vấn đề liên quan