मेरे पास 100,000+ पंक्तियों से बना डेटाफ्रेम है और प्रत्येक पंक्ति में 100,000 कॉलम हैं, पूरी तरह से 10,000,000,000 फ्लोट मान हैं।एक विशाल डस्क डेटाफ्रेम को लकड़ी की छत में सहेज रहा है?
मैं एक csv
(टैब द्वारा अलग) फ़ाइल में पहले से में उन्हें पढ़ने के लिए प्रबंधित किया है और मैं उन्हें सफलतापूर्वक 250GB रैम के साथ एक 50 कोर जिऑन मशीन के लिए पढ़ सकते हैं और इस तरह के रूप में एक .parq
निर्देशिका के रूप में इसे बाहर लिखने की कोशिश:
huge.csv
में तैरने तारों के रूप में सहेजे गए थे और यह 125 जीबी है।
import dask.dataframe as dd
filename = 'huge.csv'
df = dd.read_csv(filename, delimiter='\t', sample=500000000)
df.to_parquet('huge.parq')
यह एक सप्ताह के करीब के लिए huge.parq
के लिए लिख दिया गया है और निर्देशिका 14GB है और यह बचत .to_parquet
जल्द ही किसी भी समय बंद करने के लिए नहीं जा रहा है की प्रक्रिया की तरह लगता है।
और free -mh
दिखाया जा रहा है वहाँ अभी भी है स्मृति उपलब्ध छोड़ दिया लेकिन समय यह .parq
निर्देशिका को बचाने के लिए ले रहा है काफी धीमी है कि:
$ free -mh
total used free shared buff/cache available
Mem: 251G 98G 52G 10M 101G 152G
Swap: 238G 0B 238G
प्रश्न हैं:
के आकार को देखते हुए डेटाफ्रेम और मशीन, क्या यह डेटा डेटा फ्रेम को एक लकड़ी की छत फ़ाइल में सहेजने के लिए संभव है?
क्या यह विशाल डेटाफ्रेम को बचाने के लिए
dask
औरfastparquet
के लिए सामान्य है?क्या कोई रास्ता तय करने का कोई तरीका है कि यह एक लकड़ी की छत फ़ाइल को बचाने के लिए ले जाएगा?
10e9 फ्लोट मान मेरे लिए बहुत बड़ा प्रतीत नहीं होता है। हालांकि 1e5 कॉलम करता है। क्या आपने dask.array और HDF5 का उपयोग करने पर विचार किया है? ये दोनों आयामों में अवरुद्ध करने के लिए बेहतर अनुकूल हो सकते हैं। – MRocklin
क्या कोई कारण है कि dask.array और HDF5 >>> no के साथ डेटा फ्रेम के लिए बेहतर है।कॉलम का? "अवरुद्ध" क्या है? – alvas
प्रति विभाजन कितनी पंक्तियां? read_csv बाइट्स की संख्या पर विभाजित है, इसलिए मुझे एक छोटी संख्या की उम्मीद है। प्रत्येक विभाजन के प्रत्येक कॉलम के लिए, मेटाडेटा का एक अलग टुकड़ा होता है जो मौजूद होना चाहिए, जो आपके मेटाडेटा को पहले से देखा गया है उससे बड़ा है - लेकिन मैं इसे काम करने की अपेक्षा करता हूं। सरणी की तरह 100kx100k फ्लोट्स स्टोर करने के लिए, मैं वास्तव में [zarr] (http://zarr.readthedocs.io/en/latest/) की अनुशंसा करता हूं। – mdurant