Tôi đang học tia lửa bằng cách sử dụng cuốn sách 'Học Spark'. Đã qua thuật ngữ này (Trang 54) We can disable map-side aggregation in combineByKey() if we know that our data won’t benefit from it
Tôi đang bối rối về sự tập hợp phía bản đồ ở đây là gì ?. Điều duy nhất đến với tâm trí của tôi là Mapper & Giảm trong Hadoop MapReduce ... nhưng tin rằng không có cách nào liên quan đến Spark.tập hợp 'bản đồ' bên trong Spark
Trả lời
Ý tưởng đằng sau việc sử dụng tập hợp phía bản đồ là khá giống với bộ kết hợp Hadoop. Nếu một người lập bản đồ duy nhất có thể mang lại nhiều giá trị cho cùng một khóa, bạn có thể giảm xáo trộn bằng cách giảm các giá trị cục bộ.
Một ví dụ về hoạt động mà có thể được hưởng lợi từ bản đồ phía tập hợp được tạo ra tập các giá trị cho mỗi chủ chốt, đặc biệt là khi bạn phân vùng một RDD trước khi kết hợp:
Đầu tiên cho phép tạo ra một số dữ liệu giả:
val pairs = sc.parallelize(
("foo", 1) :: ("foo", 1) :: ("foo", 2) ::
("bar", 3) :: ("bar", 4) :: ("bar", 5) :: Nil
)
Bây giờ chúng ta có thể phân vùng sử dụng HashPartitioner
:
import org.apache.spark.HashPartitioner
val partitionedPairs = pairs.partitionBy(new HashPartitioner(2)).persist()
Và cuối cùng kết hợp:
import collection.mutable.{Set => MSet}
val combined = partitionedPairs.combineByKey(
(v: Int) => MSet[Int](v),
(set: MSet[Int], v: Int) => set += v,
(set1: MSet[Int], set2: MSet[Int]) => set1 ++= set2
)
Kể từ khi pairs
RDD đã được phân đoạn, bộ giá trị cho mỗi khóa sẽ được tạo cục bộ trên một nút công nhân, giảm lưu lượng mạng đáng kể.
Bạn nói đúng, thuật ngữ giảm từ phía bản đồ đến từ vùng Map/Reduce và ý tưởng hơi phức tạp ở phía Apache Spark. Nếu có thể chúng ta có thể kết hợp nhiều phần tử trong một phân vùng trước khi xáo trộn các phần tử (và các phần tử kết hợp chiếm ít không gian hơn) - thì thực hiện giảm phân vùng trước khi xáo trộn dữ liệu sẽ hữu ích.
Một trường hợp giảm phía bản đồ là bị vô hiệu hóa trong Spark là groupByKey
ngay cả khi chúng ta có thể kết hợp một số phần tử trong cùng một phân đoạn, chúng sẽ chiếm khoảng không gian tương tự. giảm mạng/serialization làm việc.
Hy vọng rằng sẽ giúp và vui mừng bạn đang đọc Spark Learning :)
Ví dụ, bạn không thể sử dụng bản đồ bên kết hợp (kết hợp), nếu bạn giá trị nhóm bởi chính (hoạt động groupByKey không sử dụng bộ kết hợp). Lý do là tất cả các giá trị cho mỗi khóa phải có mặt sau khi thao tác groupByKey kết thúc. Do đó, không thể giảm giá trị cục bộ (combiner).
- 1. spark - filter trong bản đồ
- 2. Bản đồ phân tán trong Scala Spark
- 3. Sửa đổi bộ sưu tập bên trong Spark RDD foreach
- 4. multimap vs bản đồ với tập hợp
- 5. Bản đồ bản đồ - cách giữ bản đồ bên trong làm bản đồ?
- 6. Scala: cách hợp nhất một bộ sưu tập Bản đồ
- 7. GROUP BY và tập hợp trên Vector bản đồ - Clojure
- 8. Chuyển đổi một khung dữ liệu Spark thành bộ sưu tập Bản đồ Scala
- 9. Tại sao Spark không cho phép kết hợp phía bản đồ với các khóa mảng?
- 10. Tại sao Spark nhanh hơn Bản đồ Hadoop Giảm
- 11. Apache-Spark: Bản đồ (_._ 2) viết tắt là gì?
- 12. Bật bản đồ băm bên trong trong Clojure
- 13. Lập bản đồ một thành phần bên trong Bộ sưu tập thành phần
- 14. AutoMapper: Lập bản đồ bộ sưu tập của đối tượng đến một tập hợp các chuỗi
- 15. Phân vùng bằng đồ thị Spark
- 16. Hợp nhất hai Bản đồ
- 17. Kết hợp bản đồ Leaflet trong bản trình bày của các bản trình bày trong R
- 18. Đồ thị biểu đồ tập hợp con theo nhãn
- 19. Dòng Java: tổng hợp trong danh sách tất cả các tập hợp không phải Null nhận được trong bản đồ()
- 20. Kết hợp nhiều bản đồ nhiệt trong matplotlib
- 21. Đọc các tệp JSON vào Tập dữ liệu Spark và thêm các cột từ một Bản đồ
- 22. Thành phần và tập hợp trong một sơ đồ lớp
- 23. Sử dụng Danh sách bên trong bản đồ C++
- 24. Hibernate/NHibernate tập tin bản đồ biên tập
- 25. Spark: Ghi vào tập tin Avro
- 26. MongoDB kịch bản bên ngoài tập tin
- 27. kết hợp các bản đồ thành một bản đồ các bộ giá trị với clojure
- 28. quá nhiều phím bản đồ gây ra ngoại lệ bộ nhớ trong spark
- 29. Hợp nhất hai bản đồ STL
- 30. trường hợp lớp học từ Bản đồ
Chúng ta hãy nói rằng việc chuyển đổi reduceByKey dựa trên kết hợpByKey và trong đó bạn thực sự không cần tập hợp phía bản đồ. Do đó việc vô hiệu hóa tập hợp phía bản đồ là hợp lý vì chúng tôi thực sự chỉ cần thực hiện một phép biến đổi giảm ở đây. – eliasah
@eliasah Khi ông nói 'bản đồ bên', có nghĩa là nó liên quan đến phương thức map() trong RDD. Khi ông nói 'tổng hợp' có nghĩa là ông đang đề cập đến việc đi qua từng phần tử trong RDD để thực hiện một số chuyển đổi trên các yếu tố đó không? – Raj