tôi hiểu quan điểm rằng trong Scala có 2 loại hoạt độngTại sao tồn tại() đều lười biếng đánh giá trong Spark
- Transformations
- Actions
Transformations như map(), bộ lọc () được đánh giá uể oải. Vì vậy, tối ưu hóa có thể được thực hiện trên thực thi hành động. Ví dụ: nếu tôi thực thi hành động đầu tiên() thì Spark sẽ tối ưu hóa để chỉ đọc dòng đầu tiên.
Nhưng tại sao hoạt động persist() được đánh giá một cách lười biếng. Bởi vì một trong hai cách tôi đi, háo hức hoặc lười biếng, nó sẽ tồn tại toàn bộ RDD theo mức lưu trữ.
Bạn có thể vui lòng nêu chi tiết cho tôi tại sao persist() là chuyển đổi thay vì hành động không.
Sai chúng không giống nhau, 'lưu giữ vĩnh viễn' trên đĩa nhưng' cache' lưu trong mem, hơn nữa 'persist' có một số cách để làm việc trên các API' scala' và 'java'. –
Tôi đứng (sửa chữa một phần): cache() = persist() = persist (StorageLevel.MEMORY_ONLY) Nó vẫn là một cách để tạm thời lưu trữ các tính toán trung gian. Nó chỉ được thực hiện khi cần thiết như vậy nó là một hoạt động lười biếng –
Đó là câu hỏi của tôi "Tại sao làm cho kiên trì() gọi lười biếng?" Bởi vì cuối cùng nó sẽ lưu trữ (cho rằng ngữ cảnh đời sống) RDD theo mức lưu trữ (như MEMORY_ONLY, DISK_ONLY, vv). Trong các biến đổi khác, tôi đồng ý rằng chúng tôi có thể đạt được tối ưu hóa chi phí với sự lười biếng. –