r - 从并行循环内部将文本附加到现有文件
问题描述
我目前正在并行处理一些数据,作为一个更大的循环的一部分,基本上看起来像这样:
for (i in files) {
doFunction
foreach (j = 1:100) %dopar% {
parallelRegFun}
}
doFunction
提取每年的平均数据,而对parallelRegFun
具有最大重叠窗口的数据进行回归(并不总是 1:100,有时可能是 1:1000+,这就是我并行执行的原因)。
部分parallelRegFun
涉及将数据写入 CSV
write_csv(parallelResults,
path = "./outputFile.csv",
append = TRUE, col_names = FALSE)
问题是,在写入输出文件时,数据通常会附加到现有行,或者写入空白行。例如,输出可能如下所示:
+-----+-------+------+---+-------+------+
| Uid | X | Y | | | |
+-----+-------+------+---+-------+------+
| 1 | 0.79 | 2.37 | | | |
+-----+-------+------+---+-------+------+
| 2 | -1.88 | 3.53 | 3 | -0.54 | 3.32 |
+-----+-------+------+---+-------+------+
| | | | | | |
+-----+-------+------+---+-------+------+
| 5 | -0.18 | 1.45 | | | |
+-----+-------+------+---+-------+------+
这需要事后进行大量清理,但是当某些输出文件为 100+MB 时,需要手动检查和清理大量数据。看起来,如果写入一个空白行,则该行的输出完全从输出中丢失 - 即它不在附加到现有行的数据中。
有没有办法让doParallel
工作人员检查文件是否正在被访问,如果是,等到它不在附加输出之前?我认为类似于Sys.sleep()
在write_csv
命令起作用之前的东西,因为它会迫使每个工作人员在写入之前等待不同的时间,但这在我所做的测试中似乎不起作用。
解决方案
推荐阅读
- algorithm - 为什么平衡 BST 在可变结构中的二进制堆上没有普遍使用?
- javascript - 反应不渲染地图功能
- python - Reddit bot 仅在运行时获取新帖子,但不会主动获取在 bot 已经运行时发布的帖子
- c# - C# 任务调用相同的实例
- wordpress - 尝试了一切,但 wp-admin 仍然显示空白屏幕
- bash - 使用 sed 进行 bashrc 别名搜索和替换
- c# - 使用 ODBC 连接时如何在 MS Access 或 SQL Server 中使用日期数据类型
- adsense - 如何在 VuePress 上实现 Google Adsense?
- c - 用于控制防火墙的 D-Bus API 或 C 库
- javascript - 如何在 html 和 css 中制作网格