2017-05-14 22 views

Trả lời

25

Hãy để tôi giúp bạn làm rõ họ, cả hai đều chung để sử dụng và quan trọng!

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))] 

Đây là prototype của tham gia, xin vui lòng cẩn thận nhìn vào nó. Ví dụ,

val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2) 
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2) 

scala> rdd1.join(rdd2).collect 
res0: Array[(String, (String, String))] = Array((A,(1,a)), (C,(3,c))) 

Tất cả các phím sẽ xuất hiện trong kết quả cuối cùng ta thường rdd1 và rdd2. Điều này tương tự như relation database operation INNER JOIN.

Nhưng cogroup là khác nhau,

def cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))] 

như một chìa khóa ít nhất xuất hiện trong một trong hai rdds, nó sẽ xuất hiện trong kết quả cuối cùng, hãy để tôi làm rõ điều này:

val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2) 
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2) 

scala> var rdd3 = rdd1.cogroup(rdd2).collect 
res0: Array[(String, (Iterable[String], Iterable[String]))] = Array(
(B,(CompactBuffer(2),CompactBuffer())), 
(D,(CompactBuffer(),CompactBuffer(d))), 
(A,(CompactBuffer(1),CompactBuffer(a))), 
(C,(CompactBuffer(3),CompactBuffer(c))) 
) 

Điều này là rất similar đến relation database operation FULL OUTER JOIN, nhưng thay vì làm phẳng kết quả trên mỗi dòng cho mỗi bản ghi, nó sẽ cung cấp cho bạn interable interface cho bạn, hoạt động sau đây là tùy thuộc vào bạn thuận tiện!

Chúc may mắn!

docs Spark là: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

+0

Làm thế nào để sử dụng 'cogroup' cho các tập dữ liệu lớn như khi tôi sử dụng' thu thập() 'nó ném ra khỏi memory exception 'rdd1 = rdd2.cogroup (rdd3) .collect'. Bạn có thể giúp về vấn đề này không [https://stackoverflow.com/questions/47180307/how-to-use-cogroup-for-large-datasets].Cảm ơn bạn – Vignesh

+0

@Vignesh, vui lòng sử dụng phương thức lấy thay vì thu thập. – ashburshui

+0

yh, thử với 'take, top' bạn có biết cách phân vùng lại mã sau đây không? – Vignesh

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