ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
106 stars 30 forks source link

R数据的保存与读取:qs包 #5350

Closed ixxmu closed 1 month ago

ixxmu commented 1 month ago

https://mp.weixin.qq.com/s/rr_7bfHprhfSuj6uNhLWKQ

ixxmu commented 1 month ago

R数据的保存与读取:qs包 by 上海生物芯片


qs:R对象的快速序列化

qs是一个R语言包,使用qs可以快速地从磁盘中保存和读取对象。它的主要目的是替换R中的saveRDS和readRDS函数,提供了一个更加快速而完整的数据读写方法。

受到fst的启发,qs通过lz4/zstd库使用了类似的块压缩设计。它的不同之处在于,对属性和对象的引用设计了更普适的方法。

一方面,saveRDS和readRDS是R数据序列化的标准,但是这些函数没有针对速度进行优化;另一方面,fst非常快,但只适用于部分数据类型如data.frame。qs结合了两者的优点,能够做到更加快速的储存数据,适用于各种类型的对象。


下载


使用方法


特征

下表比较了R中不同序列化方法的特性

此外,qs还包括许多高级功能。

✅  对于字符向量,qs还可以选择使用新的ALTREP系统(R版本3.5)来快速读取字符串数据。

✅  对于数值数据(数值、整数、逻辑和复杂向量),qs实现了字节变换过滤器(采用于blossom元压缩库)。这些过滤器利用扩展的CPU指令系统(SSE2或AVX2)。

✅  qs还可以有效地序列化S4对象、环境和其他复杂对象。


基准测试

下面的基准测试使用了一个包含500万行的数据框(~115 Mb)比较了qs、fst和saveRDS/loadRDS的性能。

序列化

去序列化


对读写速度进行基准测试会有点棘手,因为其高度依赖于许多因素,例如操作系统、运行的硬件、数据的分布,甚至是R实例的状态。读取数据还进一步受到各种硬件和软件内存缓存的影响。一般来说,无论使用单线程还是多线程压缩,qs和fst都比saveRDS快得多。qs还设法通过各种优化实现更高的压缩比,提供了多个可选参数,用户可以根据个人情况和需求来设置速度和压缩比。


往期推荐:

1、【Giotto系列】Giotto数据结构(下)
2、【Giotto系列】Giotto数据结构(上)
3、【Giotto系列】软件介绍与下载


ixxmu commented 1 month ago

https://github.com/fstpackage/fst/issues/91

ixxmu commented 1 month ago

https://krlmlr.github.io/fstplyr/reference/src_fst.html