为什么R坚持要进口一根羽毛?

lzfw57am  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(127)

我有一个R脚本,当我在一个循环中运行它时,它会在一个可变的迭代次数后保持不变。没有错误消息-只是挂起。
通过MRE:

library(arrow)

## clear environment
rm(list=ls())

### read in models
x <- 1
while (x < 50)
{
  print(x)
  matches_for_prediction <- read_feather(<file_path>)
  x = x + 1
  Sys.sleep(2)
}

我想知道这是否可能是某种打开文件的冲突,但我已经尝试延长睡眠无济于事。
坦白说......我主要使用Python,对R不太了解。

kqhtkvqz

kqhtkvqz1#

我也有这个问题,通过大量的挖掘,我发现这个问题:https://issues.apache.org/jira/browse/ARROW-11579它描述了在windows上有时会出现线程死锁。可能的解决方案如下:

  • 允许通过arrow::set_cpu_count()使用减少线程数的箭头
  • 通过选项切换多线程(arrow.use_threads = FALSE)
  • 通过write_feather写入时不压缩文件(...,compression =“uncompressed”)
y1aodyip

y1aodyip2#

由于代码可以在小文件上完美运行,因此可能是内存问题。
您可以尝试以下操作,这将给予:
1.你试图读取的文件的大小

  1. R中新物体的大小
  2. R使用的总内存(memory.size()仅适用于Windows)
    1.执行垃圾收集,以便删除未使用的对象
x <- 1
while (x < 50) {
  print(paste('Reading file #',x,":",format(structure(file.size(path), class="object_size"),units='auto')))
  matches_for_prediction <- read_feather(path)
  print(paste('Object size',format(object.size(matches_for_prediction),'auto'),'- Total Memory used :',memory.size()))
  gc()
  x = x + 1
}

[1] "Reading file # 1 : 108.5 Mb"
[1] "Object size 669.9 Mb - Total Memory used : 1258.53"
...

循环只会在内存容量合适的情况下结束!

相关问题