ความแตกต่างระหว่างแคชและการคงอยู่คืออะไร?


คำตอบ:


222

ด้วยcache()คุณจะใช้ระดับการจัดเก็บเริ่มต้นเท่านั้น:

  • MEMORY_ONLYสำหรับRDD
  • MEMORY_AND_DISKสำหรับชุดข้อมูล

ด้วยpersist()คุณสามารถระบุระดับการจัดเก็บข้อมูลที่คุณต้องการสำหรับทั้งRDDและชุดข้อมูล

จากเอกสารอย่างเป็นทางการ:

  • คุณสามารถทำเครื่องหมายRDDที่จะคงอยู่โดยใช้persist() หรือcache() วิธีการนั้น
  • แต่ละการยืนยันRDDสามารถจัดเก็บโดยใช้ที่แตกต่างกันstorage level
  • วิธีการcache() เป็นชวเลขสำหรับการใช้ระดับการจัดเก็บเริ่มต้นซึ่งเป็นStorageLevel.MEMORY_ONLY(วัตถุ deserialized เก็บในหน่วยความจำ)

ใช้persist()หากคุณต้องการกำหนดระดับพื้นที่เก็บข้อมูลอื่นที่ไม่ใช่:

  • MEMORY_ONLYเพื่อRDD
  • หรือMEMORY_AND_DISKสำหรับชุดข้อมูล

ลิงค์ที่น่าสนใจสำหรับเอกสารอย่างเป็นทางการ: ระดับการจัดเก็บที่จะเลือก


17
โปรดทราบว่าcache()ขณะนี้ใช้MEMORY_AND_DISK
ximiki

ฉันไม่คิดว่าความคิดเห็นข้างต้นถูกต้อง การอ่านเอกสารอย่างเป็นทางการล่าสุดโดยใช้ลิงก์ ahars จะจัดให้สอดคล้องกับสัญลักษณ์แสดงหัวข้อย่อยสุดท้าย ... วิธีการแคช () เป็นวิธีย่อสำหรับการใช้ระดับการจัดเก็บเริ่มต้นซึ่งเป็น StorageLevel.MEMORY_ONLY
2596560

1
@ximiki MEMORY_AND_DISKเป็นค่าเริ่มต้นสำหรับชุดข้อมูลเท่านั้น MEMORY_ONLYยังคงเป็นค่าเริ่มต้นสำหรับ RDD
ahars

1
@ user2596560 ความคิดเห็นถูกต้องสำหรับค่าแคชเริ่มต้นของชุดข้อมูล คุณเหมาะสำหรับ RDD ที่ยังคงค่าเริ่มต้น
MEMORY_ONLY ไว้

83

ความแตกต่างระหว่างcacheและpersistการดำเนินงานเป็นวากยสัมพันธ์อย่างแท้จริง cache เป็นคำพ้องความหมายของ persist หรือ persist ( MEMORY_ONLY) นั่น cacheคือเป็นเพียงpersistกับระดับการจัดเก็บเริ่มต้นMEMORY_ONLY


/ ** * คง RDD นี้ด้วยระดับการจัดเก็บเริ่มต้น ( MEMORY_ONLY) * /
def persist (): this.type = persist (StorageLevel.MEMORY_ONLY)

/ ** * คง RDD นี้ด้วยระดับการจัดเก็บเริ่มต้น ( MEMORY_ONLY) * /
def แคช (): this.type = persist ()

ดูรายละเอียดเพิ่มเติมได้ที่นี่ ...


การแคชหรือการคงอยู่เป็นเทคนิคการเพิ่มประสิทธิภาพสำหรับการคำนวณ Spark (วนซ้ำและโต้ตอบ) ช่วยในการบันทึกผลลัพธ์บางส่วนชั่วคราวเพื่อให้สามารถนำกลับมาใช้ใหม่ได้ในระยะต่อไป ผลลัพธ์ระหว่างกาลเหล่านี้ในฐานะRDDs จะถูกเก็บไว้ในหน่วยความจำ (ค่าเริ่มต้น) หรือที่เก็บข้อมูลที่มั่นคงเช่นดิสก์และ / หรือจำลองแบบ RDDs สามารถแคชได้โดยใช้cacheการดำเนินการ พวกเขายังสามารถยืนยันการใช้persistงาน

persist, cache

RDDฟังก์ชั่นเหล่านี้สามารถนำมาใช้เพื่อปรับระดับการจัดเก็บของ เมื่อเพิ่มหน่วยความจำ Spark จะใช้ตัวระบุระดับหน่วยเก็บข้อมูลเพื่อตัดสินใจว่าควรเก็บพาร์ติชั่นใด พารามิเตอร์ชุดย่อยน้อยลง persist() และcache() เป็นเพียงตัวย่อสำหรับ persist(StorageLevel.MEMORY_ONLY).

คำเตือน : เมื่อระดับการจัดเก็บมีการเปลี่ยนแปลงก็ไม่สามารถเปลี่ยนได้อีกครั้ง!

คำเตือน - แคชอย่างรอบคอบ ... ดู ( ทำไม ()) เราจำเป็นต้องเรียกแคชหรือคงอยู่กับ RDD )

เพียงเพราะคุณสามารถแคชRDDในหน่วยความจำไม่ได้หมายความว่าคุณควรทำอย่างสุ่มสี่สุ่มห้า การคำนวณซ้ำสามารถทำได้เร็วกว่าราคาที่จ่ายโดยแรงกดดันหน่วยความจำที่เพิ่มขึ้นทั้งนี้ขึ้นอยู่กับจำนวนครั้งที่เข้าถึงชุดข้อมูลและปริมาณงานที่เกี่ยวข้อง

มันควรจะไปโดยไม่บอกว่าถ้าคุณอ่านชุดข้อมูลเมื่อไม่มีจุดในการแคชมันจะทำให้งานของคุณช้าลงจริง ๆ ขนาดของชุดข้อมูลแคชสามารถดูได้จาก Spark Shell ..

รายการตัวแปร ...

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

* ดูตัวอย่างด้านล่าง: *

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)

ป้อนภาพที่นี่

หมายเหตุ: เนื่องจากความแตกต่างของขนาดเล็กมากและมีความแตกต่างทางวากยสัมพันธ์ระหว่างการแคชและการคงอยู่ของRDDคำศัพท์ทั้งสองจึงมักใช้แทนกันได้

ดูภาพเพิ่มเติมได้ที่นี่ ....

ยังคงอยู่ในหน่วยความจำและดิสก์:

ป้อนคำอธิบายรูปภาพที่นี่

ขุมทรัพย์

การแคชสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันของคุณได้ในระดับดี

ป้อนคำอธิบายรูปภาพที่นี่


ฉันมี DF อยู่ในบล็อกฉันจะเข้าถึงได้อย่างไร
Bindumalini KK

48

ไม่มีความแตกต่าง 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 มอบระดับการจัดเก็บ 5 ประเภท

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache()MEMORY_ONLYจะใช้ persist(StorageLevel.<*type*>)หากคุณต้องการที่จะใช้อย่างอื่นใช้

โดยค่าเริ่มต้นpersist()จะเก็บข้อมูลในฮีป JVM เป็นวัตถุที่ไม่ได้เรียงลำดับ


4

Cache () และ persist () ทั้งสองวิธีใช้เพื่อปรับปรุงประสิทธิภาพของการคำนวณประกายไฟ วิธีการเหล่านี้ช่วยในการบันทึกผลลัพธ์ขั้นกลางเพื่อให้สามารถนำกลับมาใช้ใหม่ได้ในระยะต่อไป

ข้อแตกต่างระหว่าง cache () และ persist () คือการใช้เทคนิค Cache เราสามารถบันทึกผลลัพธ์ขั้นกลางในหน่วยความจำได้เมื่อต้องการในขณะที่อยู่ใน Persist () เท่านั้นเราสามารถบันทึกผลลัพธ์ระดับกลางใน 5 ระดับการจัดเก็บข้อมูล (MEMORY_ONLY DISK_ONLY)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.