वास्तविक जीवन में parLapply

R में पैरेलल प्रोग्रामिंग

Nabeel Imam

Data Scientist

वर्कर्स से मिलें

cluster <- makeCluster(4)
clusterEvalQ(cluster, {
  id <- Sys.getpid()
  print(
    paste("Hello, my worker ID is", id)
  )
})
[[1]]
[1] "Hello, my worker ID is 425108"

[[2]]
[1] "Hello, my worker ID is 425129"

[[3]]
[1] "Hello, my worker ID is 425150"

[[4]]
[1] "Hello, my worker ID is 425171"
R में पैरेलल प्रोग्रामिंग

पैरेलल में डेटा फ़िल्टर करना

print(file_list)
 [1] "./health/Afghanistan.csv"            
 [2] "./health/Albania.csv"            
 [3] "./health/Algeria.csv"            
 [4] "./health/American Samoa.csv"     
 [5] "./health/Andorra.csv"            
...

एक स्टेथोस्कोप सौ डॉलर के नोटों के बंडल पर रखा है.

R में पैरेलल प्रोग्रामिंग

पैरेलल में डेटा फ़िल्टर करना

filterCSV <- function (csv) {
  read.csv(csv) %>% 
    dplyr::filter(!is.na(health_exp_pc))
}


cl <- makeCluster(4) ls_df <- parLapply(cl, file_list, filterCSV) stopCluster(cl)
Error in checkForRemoteErrors(val) :
  first error: could not find function "%>%"
R में पैरेलल प्रोग्रामिंग

clusterEvalQ आपकी मदद में

क्लस्टर पर पैकेज लोड करें

cl <- makeCluster(4)
clusterEvalQ(cl, library(dplyr))


ls_df <- parLapply(cl, file_list, filterCSV) stopCluster(cl)

एक से अधिक पैकेज क्लस्टर पर लोड करें

clusterEvalQ(cl, {
  library(dplyr)
  library(stringr)
})
[[1]]
       Country health_exp_pc Year
1  Afghanistan      81.27103 2002
2  Afghanistan      82.45785 2003
3  Afghanistan      89.47005 2004
...

[[2]]
   Country health_exp_pc Year
1  Albania      300.2757 2001
2  Albania      314.3254 2002
3  Albania      343.9442 2003
...
R में पैरेलल प्रोग्रामिंग

शर्तों के साथ फ़िल्टरिंग

# Function with an argument for starting year
filterCSV <- function (csv, min_year) { 

  read.csv(csv) %>% 
    dplyr::filter(!is.na(health_exp_pc),

                  # Filter data for min_year and onwards
                  Year >= min_year) 
}


selected_year <- 2010 # Value to be supplied to min_year
R में पैरेलल प्रोग्रामिंग

शर्तों के साथ फ़िल्टरिंग

cl <- makeCluster(4)
clusterEvalQ(cl, library(dplyr))

clusterExport(cl, "selected_year",
envir = environment())
ls_df <- parLapply(cl, file_list, filterCSV,
min_year = selected_year)
stopCluster(cl)

   

  • selected_year को क्लस्टर पर एक्सपोर्ट करें
  • मौजूदा environment से एक्सपोर्ट करें

 

  • selected_year को min_year में सप्लाई करें
R में पैरेलल प्रोग्रामिंग

शर्तों के साथ फ़िल्टरिंग

[[1]]
       Country health_exp_pc Year
1  Afghanistan      143.6695 2010
2  Afghanistan      143.0915 2011
3  Afghanistan      151.9180 2012
...
  Country health_exp_pc Year
1 Albania      451.8820 2010
2 Albania      485.5835 2011
3 Albania      529.6322 2012
...
R में पैरेलल प्रोग्रामिंग

क्लस्टर हाइजीन चेकलिस्ट

  • कोर की संख्या तय करें
  • उपयुक्त क्लस्टर बनाएँ
    • सभी सिस्टम पर संगतता के लिए PSOCK
    • Linux या Mac के लिए FORK (और स्पीड!)
  • ज़रूरी लाइब्रेरी लोड करें
  • ज़रूरी वैरिएबल एक्सपोर्ट करें
  • एक्सपोर्टेड वैरिएबल को named argument में दें
  • काम पूरा होने पर क्लस्टर रोकें
n_cores <- detectCores() - 2


cluster <- makeCluster(n_cores)
clusterEvalQ(cluster, library(crucial_package))
clusterExport(cluster, "variable_we_need")
parLapply(cluster, ls_inputs, our_function, named_argument = variable_we_need)
stopCluster(cluster)
R में पैरेलल प्रोग्रामिंग

अभ्यास करते हैं!

R में पैरेलल प्रोग्रामिंग

Preparing Video For Download...