调用H2O的h2o.splitFrame函数时触发CURL超时错误求助
解决H2O splitFrame调用时的CURL超时问题
我调用H2O库的h2o.splitFrame函数时遇到如下错误:
Error en .Call(R_curl_fetch_memory, enc2utf8(url), handle, nonblocking):
se ha alcanzado el límite de tiempo transcurrido
已经尝试通过任务管理器释放笔记本内存,以及调整参数组合,均未解决问题。我的完整代码如下:
# 设置CURL超时时间 options(RCurlOptions = list(timeout = 600)) library(h2o) library(parallel) library(doParallel) # 检测可用核心数 n_cores <- parallel::detectCores() registerDoParallel(cores=4) # 使用优化参数初始化H2O h2o.init( ip = "localhost", nthreads = max(1, n_cores - 1), max_mem_size = "6g" ) # 禁用进度输出 h2o.no_progress() data <- as.h2o(ordata.ren) splits <- h2o.splitFrame( data = data, ratios = c(0.7, 0.15), # 将数据划分为70%、15%、15%的子集 destination_frames = c("train", "valid", "test"), # 帧ID(非必需) seed = 1 # 设置种子保证可复现性 ) # 运行此部分代码时,出现上述错误: # Error en .Call(R_curl_fetch_memory, enc2utf8(url), handle, nonblocking): # se ha alcanzado el límite de tiempo transcurrido. train <- splits[[1]] valid <- splits[[2]] test <- splits[[3]] y <- "Price" x <- setdiff(names(data), y) print(x)
可行的解决方法
延长H2O连接超时时间
在h2o.init中直接指定更长的超时参数,覆盖全局设置的局限性:h2o.init( ip = "localhost", nthreads = max(1, n_cores - 1), max_mem_size = "6g", timeout = 1200 # 设置为20分钟,根据数据量调整 )移除doParallel并行设置
H2O本身是分布式并行框架,与doParallel的本地并行机制会产生资源冲突,直接删除相关代码:# 删掉以下代码块: # library(parallel) # library(doParallel) # n_cores <- parallel::detectCores() # registerDoParallel(cores=4)优化数据导入方式
避免先在R中加载大数据集再转换为H2O帧,直接用H2O的导入函数读取源文件,减少内存占用:# 假设数据源是CSV文件,直接读取 data <- h2o.importFile("你的文件路径/ordata.ren.csv")简化splitFrame参数
移除destination_frames参数,让H2O自动处理帧存储,减少额外的通信开销:splits <- h2o.splitFrame( data = data, ratios = c(0.7, 0.15), seed = 1 )重启H2O实例
清理H2O运行时的内存碎片和无效连接:h2o.shutdown(prompt = FALSE) h2o.init( ip = "localhost", nthreads = max(1, n_cores - 1), max_mem_size = "6g", timeout = 1200 )
内容的提问来源于stack exchange,提问作者user23479948
相关产品推荐
相关产品推荐

