Closed ixxmu closed 1 month ago
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还设法通过各种优化实现更高的压缩比,提供了多个可选参数,用户可以根据个人情况和需求来设置速度和压缩比。
往期推荐:
https://mp.weixin.qq.com/s/rr_7bfHprhfSuj6uNhLWKQ