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