में मैं आदेश parLapply()
उपयोग करने के लिए समानांतर में प्रत्येक विभाजन पर एक समारोह कॉल करने के लिए में split()
के साथ एक डेटा फ्रेम विभाजन कर रहा हूँ। डेटा फ्रेम में 1.3 मिलियन पंक्तियां और 20 कॉल हैं। मैं चरित्र प्रकार दोनों, दो स्तंभों द्वारा विभाजन/विभाजन कर रहा हूं। ऐसा लगता है कि ~ 47 के अद्वितीय आईडी और ~ 12 के अद्वितीय कोड हैं, लेकिन आईडी और कोड की प्रत्येक जोड़ी मेल नहीं खाती है। विभाजन की परिणामी संख्या ~ 250K है। इस प्रकारफास्ट विकल्प विभाजित करने के लिए आर
system.time(pop_part <- split(pop, list(pop$ID, pop$code)))
विभाजन तो parLapply()
में खिलाया किया जाएगा:: यहाँ split()
लाइन है
cl <- makeCluster(detectCores())
system.time(par_pop <- parLapply(cl, pop_part, func))
stopCluster(cl)
मैं split()
कोड अकेले गए लगभग एक घंटे चलाने के लिए और यह पूरा नहीं करता है। मैं अकेले आईडी द्वारा विभाजित कर सकता हूं, जो ~ 10 मिनट लेता है। इसके अतिरिक्त, आर स्टूडियो और वर्कर थ्रेड ~ 6 जीबी रैम का उपभोग कर रहे हैं।
कारण मैं जानता हूँ कि विभाजन के परिणामस्वरूप संख्या मैं Pentaho डेटा एकीकरण (PDI) कि (पूरे कार्यक्रम ही नहीं, "विभाजन" कोड के लिए) 30 सेकंड में चलाता है में बराबर कोड है। मैं आर के साथ उस तरह के प्रदर्शन की उम्मीद नहीं कर रहा हूं, लेकिन ऐसा कुछ जो शायद 10-15 मिनट में सबसे खराब मामला पूरा करता है।
मुख्य प्रश्न: वहाँ विभाजित करने के लिए एक बेहतर विकल्प है? मैंने को .parallel = TRUE
के साथ भी आजमाया है, लेकिन यह एक घंटे से भी अधिक समय तक चला और कभी पूरा नहीं हुआ।
धन्यवाद, मैं इसे आज़माउंगा। हा, मैंने वास्तव में आर कोड को शुरुआत में लिखा था और फिर इसे पीडीआई में भेज दिया था (मैं पीडीआई से आर के साथ अधिक अनुभवी हूं)। – argoneus
मैंने आपके द्वारा पोस्ट किए गए 'स्प्लिट()' कोड को चलाया और लगभग एक घंटे तक इंतजार किया, लेकिन यह कभी पूरा नहीं हुआ। – argoneus
विभाजन के चारों ओर जोड़े गए कुछ अतिरिक्त सुझाव, जो कि दूसरे या उससे कम के आदेश पर लेना चाहिए। हो सकता है कि कारक भी func धीमा होने के कारण भी हो? –