2015-11-25 19 views
6

Spark được gửi cùng với các Biến phát sóng, cho phép chúng tôi giữ một biến chỉ đọc được lưu trong bộ nhớ cache trên mỗi máy thay vì gửi bản sao của nó bằng các tác vụ.Sự khác nhau giữa tiêu diệt() và unpersist() là gì?

Tất nhiên, khi "biến phát sóng" sẽ không được sử dụng nữa, việc xóa biến này là điều tự nhiên. Nhưng from the documentation, có vẻ như rằng có hai cách để xóa biến phát sóng Mà là:

unpersist() //Destroy all data and metadata related to this broadcast variable. 
destroy() //Asynchronously delete cached copies of this broadcast on the executors. 

Tôi không chắc chắn để undestand đúng tất cả mọi thứ, không unpersist() không giống như xóa() nhưng đồng bộ? Điều này là không rõ ràng đối với tôi.

Trả lời

6

Vì nó được thực hiện trong hai ngôn ngữ này hiện có sẵn bê tông (HttpBroadcastTorrentBroadacst) có hai sự khác biệt:

  • unpersist chặn (awaits for confirmation) trong khi destroy là non-blocking
  • destroy để loại bỏ việc vẫn kiên trì khối từ số driver trong khi unpersist không

Otherwis e chúng sử dụng cùng một logic của BlockMangerMaster.

+1

Tính đến tháng 6 năm 2016, không có phương thức 'xóa' (phương thức được gọi là' phá hủy') và cả 'phá hủy' và' unpersist' cho tùy chọn chặn hay không. Sự khác biệt duy nhất còn lại là 'phá hủy' cũng loại bỏ các tập tin phát sóng trên tổng thể. – Dici

+0

@Dici Cảm ơn. Tôi sẽ cập nhật sớm. – zero323

+1

@Dici Theo tôi có thể nói rằng việc chặn chặn là [riêng tư để phát ra tia lửa] (https://github.com/apache/spark/blob/d6dc12ef0146ae409834c78737c116050961f350/core/src/main/scala/org/apache/spark/broadcast/Broadcast .scala # L106). Tôi có bỏ sót điều gì ở đây không? – zero323

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