मैंने एक बड़ी फ़ाइल और एक छोटी मर्ज करने की कोशिश कर दीवार को मारा है। मेरे पास readmany आर में स्मृति प्रबंधन के बारे में अन्य पोस्ट हैं, और इसे हल करने के तरीके को गैर-चरम (64 बिट पर जाएं, क्लस्टर पर अपलोड करें) आदि नहीं ढूंढ पाए हैं। मैंने बड़े पैमाने पर पैकेज के साथ थोड़ा सा प्रयास किया है, लेकिन समाधान खोजने में सक्षम नहीं है। मैंने सोचा कि मैं निराशा में अपने हाथ फेंकने से पहले यहां कोशिश करूँगा।बिग मर्ज/मेमोरी प्रबंधन
कोड मैं चल रहा हूँ नीचे की तरह है:
#rm(list=ls())
localtempdir<- "F:/Temp/"
memory.limit(size=4095)
[1] 4095
memory.size(max=TRUE)
[1] 487.56
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 170485 4.6 350000 9.4 350000 9.4
Vcells 102975 0.8 52633376 401.6 62529185 477.1
client_daily<-read.csv(paste(localtempdir,"client_daily.csv",sep=""),header=TRUE)
object.size(client_daily)
>130MB
sbp_demos<-read.csv(paste(localtempdir,"sbp_demos",sep=""))
object.size(demos)
>0.16MB
client_daily<-merge(client_daily,sbp_demos,by.x="OBID",by.y="OBID",all.x=TRUE)
Error: cannot allocate vector of size 5.0 MB
मुझे लगता है मैं पूछ रहा हूँ वहाँ इस जो नए हार्डवेयर खरीदने शामिल नहीं है के आसपास किसी भी चालाक तरीके हैं?
- मुझे एक बड़ी वस्तु बनाने के लिए
merge
करने में सक्षम होना चाहिए। - मुझे उस बड़ी वस्तु के साथ रिग्रेशन आदि करने की आवश्यकता होगी।
क्या मुझे छोड़ देना चाहिए? क्या बड़े पैमाने पर इसे हल करने में मदद करने में सक्षम होना चाहिए?
किसी भी मार्गदर्शन की सराहना की।
विवरण: आर संस्करण 2.13.1 (2011-07-08) प्लेटफार्म: i386-पीसी-mingw32/i386 (32-बिट) इंटेल कोर 2 डुओ @ 2.33GHz, 3.48GB रैम
क्या आपने 'data.table' पैकेज देखा है? यह बड़े विलय के लिए * तेज़ * है, और संयोग से बूट करने के लिए अधिक स्मृति कुशल हो सकता है? – Chase
यह शायद आपकी समस्या का समाधान यहाँ नहीं होगा, लेकिन कुछ तुम कोशिश कर सकते है। में डेटा को पढ़ने के बाद उन्हें हटाने, एक जी सी() करते हैं, और फिर मर्ज पुन: प्रयास करें: यदि या तो डेटा सेट जो आप की जरूरत नहीं है किसी भी स्तंभ हैं। एक और विचार है, यदि संभव हो तो एक मैट्रिक्स के लिए अपने डेटा कन्वर्ट करने के लिए के रूप में वे कम स्मृति का प्रयोग होता हैं। – Rguy