ในแง่ของการRDDคงอยู่ความแตกต่างระหว่างcache()และpersist()ในประกายไฟคืออะไร?
ในแง่ของการRDDคงอยู่ความแตกต่างระหว่างcache()และpersist()ในประกายไฟคืออะไร?
คำตอบ:
ด้วยcache()คุณจะใช้ระดับการจัดเก็บเริ่มต้นเท่านั้น:
MEMORY_ONLYสำหรับRDDMEMORY_AND_DISKสำหรับชุดข้อมูลด้วยpersist()คุณสามารถระบุระดับการจัดเก็บข้อมูลที่คุณต้องการสำหรับทั้งRDDและชุดข้อมูล
จากเอกสารอย่างเป็นทางการ:
- คุณสามารถทำเครื่องหมาย
RDDที่จะคงอยู่โดยใช้persist() หรือcache() วิธีการนั้น- แต่ละการยืนยัน
RDDสามารถจัดเก็บโดยใช้ที่แตกต่างกันstorage level- วิธีการ
cache() เป็นชวเลขสำหรับการใช้ระดับการจัดเก็บเริ่มต้นซึ่งเป็นStorageLevel.MEMORY_ONLY(วัตถุ deserialized เก็บในหน่วยความจำ)
ใช้persist()หากคุณต้องการกำหนดระดับพื้นที่เก็บข้อมูลอื่นที่ไม่ใช่:
MEMORY_ONLYเพื่อRDDMEMORY_AND_DISKสำหรับชุดข้อมูลลิงค์ที่น่าสนใจสำหรับเอกสารอย่างเป็นทางการ: ระดับการจัดเก็บที่จะเลือก
MEMORY_AND_DISKเป็นค่าเริ่มต้นสำหรับชุดข้อมูลเท่านั้น MEMORY_ONLYยังคงเป็นค่าเริ่มต้นสำหรับ RDD
ความแตกต่างระหว่าง
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ในหน่วยความจำไม่ได้หมายความว่าคุณควรทำอย่างสุ่มสี่สุ่มห้า การคำนวณซ้ำสามารถทำได้เร็วกว่าราคาที่จ่ายโดยแรงกดดันหน่วยความจำที่เพิ่มขึ้นทั้งนี้ขึ้นอยู่กับจำนวนครั้งที่เข้าถึงชุดข้อมูลและปริมาณงานที่เกี่ยวข้อง
มันควรจะไปโดยไม่บอกว่าถ้าคุณอ่านชุดข้อมูลเมื่อไม่มีจุดในการแคชมันจะทำให้งานของคุณช้าลงจริง ๆ ขนาดของชุดข้อมูลแคชสามารถดูได้จาก 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คำศัพท์ทั้งสองจึงมักใช้แทนกันได้
ดูภาพเพิ่มเติมได้ที่นี่ ....
ยังคงอยู่ในหน่วยความจำและดิสก์:
การแคชสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันของคุณได้ในระดับดี
ไม่มีความแตกต่าง 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()
Spark มอบระดับการจัดเก็บ 5 ประเภท
MEMORY_ONLYMEMORY_ONLY_SERMEMORY_AND_DISKMEMORY_AND_DISK_SERDISK_ONLYcache()MEMORY_ONLYจะใช้ persist(StorageLevel.<*type*>)หากคุณต้องการที่จะใช้อย่างอื่นใช้
โดยค่าเริ่มต้นpersist()จะเก็บข้อมูลในฮีป JVM เป็นวัตถุที่ไม่ได้เรียงลำดับ
Cache () และ persist () ทั้งสองวิธีใช้เพื่อปรับปรุงประสิทธิภาพของการคำนวณประกายไฟ วิธีการเหล่านี้ช่วยในการบันทึกผลลัพธ์ขั้นกลางเพื่อให้สามารถนำกลับมาใช้ใหม่ได้ในระยะต่อไป
ข้อแตกต่างระหว่าง cache () และ persist () คือการใช้เทคนิค Cache เราสามารถบันทึกผลลัพธ์ขั้นกลางในหน่วยความจำได้เมื่อต้องการในขณะที่อยู่ใน Persist () เท่านั้นเราสามารถบันทึกผลลัพธ์ระดับกลางใน 5 ระดับการจัดเก็บข้อมูล (MEMORY_ONLY DISK_ONLY)
cache()ขณะนี้ใช้MEMORY_AND_DISK