หลีกเลี่ยงการโหลด DataFrame ระหว่างเมล็ดหลามที่แตกต่างกัน


10

มีวิธีการเก็บรักษาตัวแปร (ตารางขนาดใหญ่ / กรอบข้อมูล) ในหน่วยความจำและใช้ร่วมกันในหลาย ๆ โน๊ตบุ๊ค ipython หรือไม่?

ฉันกำลังมองหาบางอย่างที่คล้ายกับแนวคิดของ MATLAB ตัวแปรถาวร มีความเป็นไปได้ที่จะเรียกฟังก์ชั่นที่กำหนดเอง / ห้องสมุดจากบรรณาธิการแต่ละคน (โน๊ตบุ๊ค) และมีฟังก์ชั่นภายนอกแคชบางผลลัพธ์ (หรือตารางขนาดใหญ่)

ส่วนใหญ่ฉันต้องการหลีกเลี่ยงการโหลดตารางที่ใช้งานหนัก (ซึ่งโหลดผ่านไลบรารีแบบกำหนดเองที่เรียกจากสมุดบันทึก) เนื่องจากการอ่านจะใช้เวลาประมาณ 2-3 นาทีเมื่อใดก็ตามที่ฉันเริ่มการวิเคราะห์ใหม่


1
ดูเหมือนจะเป็นไปไม่ได้และอาจทำให้เกิดอาการปวดหัวมากหากคุณไม่ระวัง ข้อมูลยังคงอยู่ในรูปแบบที่มีประสิทธิภาพอย่างmsgpackหรือไม่?
Emre

@ Emm ขอบคุณ ส่วนที่ยุ่งยากกับ msgpack คือมันไม่สามารถแก้ปัญหาพื้นฐานที่จำเป็นต้องอ่านตาราง นอกจากนี้ยังเป็นดาบสองคม: ในขณะที่ประหยัดประมาณ 40% ของเวลาเมื่อเทียบกับรูปแบบดั้งเดิมของตารางมันยังทำให้การวิเคราะห์ด้วยตนเองเพียงขั้นตอนเดียวห่างจากข้อมูลต้นฉบับ (ซึ่งไม่สะอาด)
tsttst

ฉันคิดว่าตัวเลือกที่ดีที่สุดคือแคชเช่น redis ซึ่งสามารถใช้ร่วมกับ msgpack อย่างน้อยคุณก็ยังคงอยู่ในหน่วยความจำแทนดิสก์
Emre

1
ฉันจะพิจารณาใช้Feather - มันเร็วมาก
MaxU

1
Spark และแคชจะเป็นตัวเลือกหรือไม่ คุณจำเป็นต้อง จำกัด การใช้ Spark ในโน้ตบุ๊กของคุณแม้ว่าจะทำการอ่าน / ประมวลผลครั้งแรก
Dolan Antenucci

คำตอบ:


4

หากเป็นสิ่งสำคัญสำหรับกรณีการใช้งานของคุณคุณสามารถลองเปลี่ยนเป็น Apache Zeppelin เนื่องจากโน้ตบุ๊ก Spark ทั้งหมดนั้นแชร์บริบท Spark เดียวกันสภาพแวดล้อมการทำงาน Python เดียวกัน https://zeppelin.apache.org/

ดังนั้นสิ่งที่คุณถามเกิดขึ้นใน Zeppelin หรือเพื่อให้เสร็จสมบูรณ์เป็นตัวเลือกในการแบ่งปันบริบท Spark / Python envrionment เดียวกันระหว่างโน้ตบุ๊ก Spark ทั้งหมด (เรียกว่า 'โน้ต' ใน Zeppelin):

ตัวเลือก Spark Interpreter Sharing ใน Zeppelin

ดังนั้นคุณสามารถเลือกที่จะแบ่งปันบริบททั่วโลก (พฤติกรรมเริ่มต้นของ Zeppelin) ต่อหมายเหตุ (พฤติกรรมของ Jupyter ที่เป็นไปได้เท่านั้น) หรือต่อผู้ใช้

หากคุณไม่สามารถ / ไม่ต้องการเปลี่ยนไปใช้ Zeppelin ให้ดูตัวเลือกอื่น ๆ ของการแบ่งปันดาต้าเฟรมทั่วไประหว่างโน้ตบุ๊กของคุณโดยใช้:

PS คุณไม่สามารถนำเข้าไฟล์ไปยัง ipynb เหาะปัจจุบัน ณ ขณะนี้ (มันมีรูปแบบโน๊ตบุ๊คของตัวเองเก็บไว้เป็นไฟล์ JSON ก) จนhttps://issues.apache.org/jira/browse/ZEPPELIN-1793จะดำเนินการ; แม้ว่าจะไม่ยากที่จะแปลงด้วยตนเองในกรณีส่วนใหญ่


1
ขอบคุณ. ฉันอาจจะเปลี่ยนจากสมุดบันทึก ipython / jupyter Zeppelin สนับสนุนความเป็นไปได้ในการเลือกแบ่งปันเนื้อหาของตัวแปรที่กำหนดเท่านั้น แต่ไม่รวมถึงตัวแปรที่มีชื่อเหมือนกันภายในบรรณาธิการ / โน้ตบุ๊ก / โน้ตอื่น ๆ หรือไม่? (เช่น MATLAB ไม่)
tsttst

ไม่โชคดี - ไม่มันถูกควบคุมในระดับกระบวนการ ดังนั้นมันอาจเป็นได้ทั้งหมดหรือไม่มีอะไรเลย หากคุณเลือก Per Note มันจะเหมือนกับพฤติกรรมใน Jupyter หากคุณเลือกทั่วโลกพวกเขาจะแบ่งปันทุกอย่าง ปกติแล้วเราจะใช้ทั่วโลกเนื่องจากใช้ทรัพยากรน้อยโดยเฉพาะในสภาพแวดล้อมที่มีผู้ใช้หลายคน ยังไม่ได้ใช้ Matlab ชั่วครู่ แต่ถ้าคุณต้องแชร์เฉพาะตัวแปรที่เลือก - คุณสามารถดู Apache Arrow หรือ Feather หากเป็น Jupyter หรือ Zeppelin
Tagar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.