2014-07-05 17 views
13

Để phát sóng một biến như vậy mà một biến xảy ra đúng một lần trong bộ nhớ mỗi nút trên một cụm ai có thể làm: val myVarBroadcasted = sc.broadcast(myVar) sau đó lấy nó trong biến đổi RDD như vậy:Làm thế nào để loại bỏ/xử lý một biến phát sóng từ heap trong Spark?

myRdd.map(blar => { 
    val myVarRetrieved = myVarBroadcasted.value 
    // some code that uses it 
} 
.someAction 

Nhưng giả sử bây giờ tôi muốn thực hiện một số chi tiết hành động với biến phát sóng mới - điều gì sẽ xảy ra nếu tôi không có đủ dung lượng lưu trữ do các biến phát sóng cũ ?! Tôi muốn có một chức năng như

myVarBroadcasted.remove() 

Bây giờ tôi dường như không thể tìm ra cách để làm điều này.

Ngoài ra, một câu hỏi rất có liên quan: các biến phát sóng đi đâu? Họ có đi vào phần bộ nhớ cache của tổng bộ nhớ hay chỉ trong phần heap?

Trả lời

21

Nếu bạn muốn loại bỏ các biến phát sóng từ cả Chấp hành viên và tài xế bạn phải sử dụng destroy, sử dụng unpersist chỉ loại bỏ nó ra khỏi Chấp hành viên:

myVarBroadcasted.destroy() 

Phương pháp này được ngăn chặn. Tôi yêu mì ống!

9

Bạn đang tìm kiếm unpersist sẵn từ Spark 1.0.0

myVarBroadcasted.unpersist(blocking = true) 

biến Broadcast được lưu trữ như ArrayBuffers của deserialized đối tượng Java hay ByteBuffers serialized. (Lưu trữ khôn ngoan chúng được xử lý tương tự như RDDs - xác nhận cần thiết)

unpersist phương pháp xóa cả hai khỏi bộ nhớ cũng như đĩa trên mỗi nút của trình điều khiển. Nhưng nó vẫn ở trên nút trình điều khiển, vì vậy nó có thể được phát lại.

+0

@aaronman yep. chỉnh sửa câu trả lời để thả tham chiếu đến 'phá hủy'. –

+0

Cảm ơn. Dường như đây chỉ là trong Spark +1.0.0, không phải 0.9.0. – samthebest

+0

"Lưu trữ khôn ngoan chúng được xử lý tương tự như RDD", điều này có nghĩa là chúng nằm trong phần cache? Hay Heap? – samthebest

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