Sự khác biệt giữa bộ nhớ cache và liên tục là gì?


Câu trả lời:


222

Với cache(), bạn chỉ sử dụng mức lưu trữ mặc định:

  • MEMORY_ONLYcho RDD
  • MEMORY_AND_DISKcho bộ dữ liệu

Với persist(), bạn có thể chỉ định mức lưu trữ nào bạn muốn cho cả RDDBộ dữ liệu .

Từ các tài liệu chính thức:

  • Bạn có thể đánh dấu một RDDmục được duy trì bằng cách sử dụng các phương thức persist() hoặc cache() trên đó.
  • mỗi tồn tại RDDcó thể được lưu trữ bằng cách sử dụng khác nhaustorage level
  • Các cachephương pháp () là một cách viết tắt cho việc sử dụng các mức lưu trữ mặc định, đó là StorageLevel.MEMORY_ONLY(cửa hàng deserialized đối tượng trong bộ nhớ).

Sử dụng persist()nếu bạn muốn chỉ định mức lưu trữ khác hơn:

  • MEMORY_ONLYđến RDD
  • hoặc MEMORY_AND_DISKcho bộ dữ liệu

Liên kết thú vị cho tài liệu chính thức: chọn mức lưu trữ nào


17
Lưu ý rằng cache()bây giờ sử dụng MEMORY_AND_DISK
ximiki

Tôi không nghĩ nhận xét trên là đúng. Đọc tài liệu chính thức mới nhất, sử dụng liên kết ahars cung cấp căn chỉnh với dấu đầu dòng cuối cùng ... Phương thức cache () là cách viết tắt để sử dụng mức lưu trữ mặc định, đó là StorageLevel.MEMORY_ONLY (lưu trữ các đối tượng được khử lưu trữ trong bộ nhớ).
dùng2596560

1
@imumiki, MEMORY_AND_DISKlà giá trị mặc định chỉ dành cho Bộ dữ liệu. MEMORY_ONLYvẫn là giá trị mặc định cho RDD
ahars

1
@ user2596560 nhận xét là chính xác cho giá trị bộ đệm mặc định của các bộ dữ liệu. Bạn đúng với RDD vẫn giữ giá trị mặc định
MEMORY_ONLY

83

Sự khác biệt giữa cachepersisthoạt động hoàn toàn là cú pháp. bộ đệm là từ đồng nghĩa của bền hoặc tồn tại ( MEMORY_ONLY), tức cachelà chỉ persistvới mức lưu trữ mặc địnhMEMORY_ONLY


/ ** * Duy trì RDD này với mức lưu trữ mặc định ( MEMORY_ONLY). * /
def contin (): this.type = contin (StorageLevel.MEMORY_ONLY)

/ ** * Duy trì RDD này với mức lưu trữ mặc định ( MEMORY_ONLY). * /
def cache (): this.type = contin ()

xem thêm chi tiết tại đây ...


Bộ nhớ đệm hoặc lưu trữ là các kỹ thuật tối ưu hóa cho các tính toán Spark (lặp và tương tác). Chúng giúp lưu kết quả tạm thời một phần để chúng có thể được sử dụng lại trong các giai đoạn tiếp theo. Những kết quả tạm thời nhưRDD s được lưu trong bộ nhớ (mặc định) hoặc lưu trữ rắn hơn như đĩa và / hoặc sao chép. RDDs có thể được lưu trữ bằng cách sử dụng cachehoạt động. Họ cũng có thể được kiên trì sử dụng persisthoạt động.

persist, cache

Các chức năng này có thể được sử dụng để điều chỉnh mức lưu trữ của một RDD . Khi giải phóng bộ nhớ, Spark sẽ sử dụng mã định danh mức lưu trữ để quyết định phân vùng nào sẽ được giữ. Tham số ít biến thể persist() và cache() chỉ là viết tắt cho persist(StorageLevel.MEMORY_ONLY).

Cảnh báo : Một khi mức lưu trữ đã được thay đổi, nó không thể thay đổi lại!

Cảnh báo -Cache thận trọng ... xem ( (Tại sao) chúng ta cần gọi bộ đệm hoặc duy trì trên RDD )

Chỉ vì bạn có thể lưu trữ một RDD trong bộ nhớ không có nghĩa là bạn nên mù quáng làm như vậy. Tùy thuộc vào số lần truy cập dữ liệu và số lượng công việc liên quan đến việc đó, tính toán lại có thể nhanh hơn giá phải trả do áp lực bộ nhớ tăng.

Không nên nói rằng nếu bạn chỉ đọc một tập dữ liệu một khi không có điểm nào trong bộ nhớ đệm, nó thực sự sẽ làm cho công việc của bạn chậm hơn. Kích thước của bộ dữ liệu được lưu trong bộ nhớ cache có thể được nhìn thấy từ Spark Shell ..

Các biến thể liệt kê ...

def cache(): RDD[T]
 def persist(): RDD[T]
 def persist(newLevel: StorageLevel): RDD[T]

* Xem ví dụ dưới đây: *

val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
     c.getStorageLevel
     res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
     c.cache
     c.getStorageLevel
     res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)

nhập hình ảnh ở đây

Lưu ý: Do sự khác biệt rất nhỏ và hoàn toàn cú pháp giữa bộ nhớ đệm và sự kiên trì của RDD hai thuật ngữ thường được sử dụng thay thế cho nhau.

Xem thêm trực quan tại đây ....

Kiên trì trong bộ nhớ và đĩa:

nhập mô tả hình ảnh ở đây

Bộ nhớ cache

Bộ nhớ đệm có thể cải thiện hiệu suất của ứng dụng của bạn đến một mức độ lớn.

nhập mô tả hình ảnh ở đây


Tôi có một DF trong một khối. Làm thế nào tôi có thể truy cập nó.
Bindumalini KK

48

Không có sự khác biệt. Từ RDD.scala.

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()

23

Spark cung cấp 5 loại mức lưu trữ

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache()sẽ sử dụng MEMORY_ONLY. Nếu bạn muốn sử dụng một cái gì đó khác, sử dụngpersist(StorageLevel.<*type*>) .

Theo mặc định persist()sẽ lưu trữ dữ liệu trong heap JVM dưới dạng các đối tượng chưa được xác thực.


4

Cache () và contin () cả hai phương thức đều được sử dụng để cải thiện hiệu suất tính toán tia lửa. Các phương pháp này giúp lưu kết quả trung gian để chúng có thể được sử dụng lại trong các giai đoạn tiếp theo.

Sự khác biệt duy nhất giữa cache () và contin () là, bằng cách sử dụng kỹ thuật Cache, chúng ta chỉ có thể lưu kết quả trung gian trong bộ nhớ khi cần trong khi ở Persist (), chúng ta có thể lưu kết quả trung gian ở 5 cấp độ lưu trữ (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK, DISK_ONLY).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.