Tengo que ejecutar un fragmento de código utilizando procesamiento paralelo para reducir el tiempo de ejecución. Cada paso es independiente el uno del otro. He creado un clúster

 cl = makeCluster(cores)
 registerDoParallel(cl)
 invisible(clusterEvalQ(cl, sapply(list.files("./Src/LibrariesAndFunctions/",
                                             full.names = TRUE,
                                             recursive = TRUE),
                                  function(x) {
                                    source(x, encoding = "UTF-8")
                                  })))

Ahora necesito leer un conjunto de funciones disponibles en el mismo directorio. El problema es que los datos están en japonés y he configurado la configuración regional globalmente fuera del clúster como

Sys.setlocale("LC_ALL","japanese_JAPAN")

Esto funciona fuera del clúster pero no dentro del clúster y arroja un error como este,

2020/02/12 20:10:27.742   [INFO ]   2020/02/12 20:10:27.497   |main        |  [xxx] 結合 開始
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  4 nodes produced errors;irst error: ./Src/LibrariesAndFunctions//01_Setup_Logging_Milestone/I103_Setup.R:15:0: unexpected end of input
13:   ##
14:   ## 
   ^

Este error indica que hay un final inesperado de entrada en la línea 14 pero hay comentarios japoneses allí. Esto se puede resolver solo si los comentarios están traducidos al inglés. Entonces mi pregunta aquí es, ¿cómo establecer la configuración regional en un nodo de clúster?

1
Luiy_coder 12 feb. 2020 a las 17:51

2 respuestas

La mejor respuesta

Puede ejecutar código R arbitrario en cada nodo del clúster con clusterEvalQ.

parallel::clusterEvalQ(cl, Sys.setlocale("LC_ALL","japanese_JAPAN"))
2
Hong Ooi 14 feb. 2020 a las 11:20

He encontrado la solución para este problema. La solución es esta.

clusterCall(cl,function(){ Sys.setlocale("LC_ALL","japanese_JAPAN")})

La configuración regional se estableció en el clúster.

0
Luiy_coder 14 feb. 2020 a las 11:11