read.fst()致R崩溃,需提前检测损坏.fst文件的解决方案
如何在读取前快速可靠检测损坏的.fst文件?
该问题已在fstpackage的仓库中提出,但包作者已不再积极维护。目前遇到的核心问题是:小部分.fst文件会导致R会话直接崩溃,且该问题可稳定复现,崩溃会中断脚本后续处理流程,因此需要找到在执行read.fst()前检测文件是否损坏的替代方案。该问题在Ubuntu R服务器及Mac OS的R 4.2版本中均会触发。
已尝试的方案及存在的问题
- tryCatch()捕获异常:无法阻止R会话崩溃
- 按列读取
read.fst():存在三点明显问题:- 列数据损坏:测试文件的最后2列数据异常,输出示例:
> fst::read.fst("corrupted.fst",columns = c("termid","ts","rv","av"),from = 1,to = 10) termid ts rv av 1 1204011660 <NA> 4.646816e-310 4.646816e-310 2 1204011660 2022-07-21 07:52:43 4.646816e-310 4.646816e-310 3 1204011660 2022-08-18 16:37:19 4.646816e-310 4.646816e-310 4 1204011660 2022-08-18 16:37:20 4.646835e-310 4.646835e-310 5 1204011660 2022-08-18 16:37:50 4.646817e-310 4.646817e-310 6 1204011660 2022-08-18 16:38:13 4.646817e-310 4.646817e-310 7 1204011660 2022-08-18 16:38:43 4.646817e-310 4.646817e-310 8 1204011660 2022-08-18 16:39:13 4.646817e-310 4.646817e-310 9 1204011660 2022-08-18 16:39:15 4.646819e-310 4.646819e-310 10 1204011660 2022-08-18 16:39:45 4.646830e-310 4.646830e-310 - 响应速度极慢:仅读取前10行耗时约5秒,性能测试输出:
> system.time(fst::read.fst("corrupted.fst",columns = c("termid","ts","rv","av"),from = 1,to = 10)) user system elapsed 2.069 3.874 5.940 - 可靠性不足:对部分损坏文件仍会触发R会话崩溃,无法作为通用解决方案
- 列数据损坏:测试文件的最后2列数据异常,输出示例:
需求
希望找到更快、更可靠的.fst文件损坏预检测方法,避免读取时的会话崩溃问题。
内容的提问来源于stack exchange,提问作者Lazarus Thurston
相关产品推荐
相关产品推荐

