Tôi đã tìm kiếm giải pháp trong một thời gian dài nhưng không nhận được bất kỳ thuật toán chính xác nào.Cách chuyển RDD [(Khóa, Giá trị)] thành Bản đồ [Khóa, RDD [Giá trị]]
Sử dụng Spark RDD trong scala, làm cách nào tôi có thể chuyển đổi RDD[(Key, Value)]
thành Map[key, RDD[Value]]
, biết rằng tôi không thể sử dụng thu thập hoặc các phương pháp khác có thể tải dữ liệu vào bộ nhớ?
Trong thực tế, mục tiêu cuối cùng của tôi là để lặp trên Map[Key, RDD[Value]]
bởi chính và lời gọi saveAsNewAPIHadoopFile
cho mỗi RDD[Value]
Ví dụ, nếu tôi nhận được:
RDD[("A", 1), ("A", 2), ("A", 3), ("B", 4), ("B", 5), ("C", 6)]
tôi muốn:
Map[("A" -> RDD[1, 2, 3]), ("B" -> RDD[4, 5]), ("C" -> RDD[6])]
Tôi tự hỏi nếu nó sẽ không tốn quá nhiều tiền để làm điều đó bằng cách sử dụng filter
trên mỗi khóa A, B, C của RDD[(Key, Value)]
, nhưng tôi không biết nếu gọi bộ lọc nhiều lần có các phím khác nhau sẽ có hiệu quả? (Off Tất nhiên là không, nhưng có lẽ sử dụng cache
?)
Cảm ơn bạn
"biết rằng tôi không thể sử dụng thu thập hoặc các phương pháp khác có thể tải dữ liệu vào bộ nhớ?". Điều này không có ý nghĩa. Bản đồ kết quả sẽ phải phù hợp với bộ nhớ. –
Chỉ cần đâm hoang dã trong bóng tối; sẽ không groupBy (...) cung cấp cho bạn một cái gì đó bạn có thể sử dụng? Nó sẽ cung cấp cho bạn RDD [khóa, Iterable [giá trị]] – thoredge
@thoredge Tôi không chắc chắn rằng một iterable nên phù hợp với bộ nhớ cho số lượng rất lớn của dữ liệu, nhưng thực sự theo khối lượng đầu vào của tôi này có thể là một giải pháp – Seb