Rust: duckdb和polars读csv文件比较

一、文件准备
样本内容,N行9列的csv标准格式,有字符串,有浮点数,有整型。
在这里插入图片描述有两个csv文件,一个大约是2.1万行;一个是64万行。

二、toml文件

[package]
name = "my_duckdb"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
duckdb = { version = "0.10.2", features = ["bundled"] }
polars = {version ="0.39.0"}

三、main.rs

use duckdb::{arrow::{record_batch::RecordBatch, util::pretty::print_batches},Connection, Result,
};
use polars::prelude::*;
use std::time::{Instant};
fn main() {//test.csv:2w行;test2.csv:64w行let csvs = ["test.csv","test2.csv"]; for csv in csvs{duckdb_read_csv(csv).unwrap();polars_read_csv(csv);}}
fn duckdb_read_csv(filepath:&str) ->Result<()> {let duckdb_csv_time = Instant::now();let db = Connection::open_in_memory()?;let sql_format = format!("SELECT * from read_csv('{}');",filepath);let rbs: Vec<RecordBatch> = db.prepare(&sql_format)?.query_arrow([])?.collect();//print_batches(&rbs).unwrap();// 批量打印assert!(rbs.len()>0);println!("duckdb取出的行数:{:?} 列数:{:?}",rbs[0].num_rows(),rbs[0].num_columns());println!("duckdb 读csv花时: {:?} 秒!", duckdb_csv_time.elapsed().as_secs_f32());let _ = db.close();Ok(())
}fn polars_read_csv(filepath:&str){let polars_csv_time  = Instant::now();let df = CsvReader::from_path(filepath).unwrap().has_header(true).finish().unwrap();println!("polars读出csv的行和列数:{:?}",df.shape());println!("polars 读csv 花时: {:?} 秒!", polars_csv_time.elapsed().as_secs_f32());
}

四、输出

-----------"test.csv"-------------
duckdb取出的行数:2048 列数:9
duckdb 读csv花时: 0.032244585 秒!
polars读出csv的行和列数:(21357, 9)
polars 读csv 花时: 0.006511025 秒!
-----------"test.csv"-------------
-----------"test2.csv"-------------
duckdb取出的行数:2048 列数:9
duckdb 读csv花时: 0.1279175 秒!
polars读出csv的行和列数:(640710, 9)
polars 读csv 花时: 0.02369589 秒!
-----------"test2.csv"-------------
duckdb和polars读文件共花:0.19441628秒!

结论:从上面的样本来看,分别用duckdb和polars来读csv两个不同大小的文件,polars有优势。当然,也可能是duckdb库封装的问题,也可能是文件大小不同,测试代表性还不全。谨供参考!

五、问题
从输出可以明显看出,duckdb库读出来的num_rows是有问题的。这个问题还待查实。从print_batches(&rbs).unwrap(),打印出来的内容来看,并没有少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv简单小项目

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了大量的图像和视频处理功能。使用OpenCV可以开发各种简单的小项目&#xff0c;例如&#xff1a; 图像基本操作&#xff1a; 读取和显示图像。调整…

弱监督学习

弱监督学习&#xff08;Weak Supervision&#xff09;是一种利用不完全、不精确或噪声数据进行模型训练的方法。以下是一些常用的弱监督方法及其原理&#xff1a; 1. 数据增强&#xff08;Data Augmentation&#xff09; 原理&#xff1a; 数据增强是一种通过增加训练数据的多…

区块链的历史和发展:从比特币到以太坊

想象一下&#xff0c;你住在一个小镇上&#xff0c;每个人都有一个大账本&#xff0c;记录着所有的交易。这个账本很神奇&#xff0c;每当有人买卖东西&#xff0c;大家都会在自己的账本上记一笔&#xff0c;确保每个人的账本都是一致的。这就是区块链的基本思想。而区块链的故…

HG/T 5838-2021金属骨架发泡橡胶复合密封板检测

金属骨架发泡橡胶复合密封板是指工作温度范围-40&#xff5e;140℃&#xff0c;峰值温度为150℃条件下使用的金属骨架发泡密封板。 HG/T 5838-2021金属骨架发泡橡胶复合密封板检测项目&#xff1a; 测试项目 测试标准 外观 HG/T 5838 厚度 HG/T 5838 压缩性能 GB/T 206…

VSCode安装OpenImageDebugger

VSCode安装OpenImageDebugger 1. 官网2. 编译2.1 依赖项2.2 编译 OpenImageDebugger2.3 配置 GDB 和 LLDB 3. 验证安装是否成功 1. 官网 下载路径&#xff1a;OpenImageDebugger 2. 编译 2.1 依赖项 官网上描述&#xff0c; Qt 5.15.1Python 3.10.12 这两个其实配置并不需…

【好物推荐】给大家安利一个liux运维全能脚本工具箱

前几天在开源社区冲浪的时候无意间逛到一个部署帖&#xff0c;里面提到了一个脚本&#xff0c;让我眼前一亮。 科技Lion的Shell脚本&#xff01;大家赶紧去体验学习一下&#xff0c;感觉写的还是不错的。 该工具是一款全能脚本工具箱&#xff0c;使用shell脚本编写。专为Linux服…

Jenkins多stage共享同一变量方式

在第一个stage中为这个变量赋值&#xff0c;在其它stage中使用这个变量 import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths import java.nio.file.StandardCopyOption import groovy.json.JsonOutput import groovy.json.JsonSlurper// 共享的…

图解HTTP笔记整理(前六章)

图解HTTP 第一章 web使用HTTP &#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;协议作文规范&#xff0c;完成从客户端到服务器端等一系列运作流程。 协议&#xff1a;计算机与网络设备要相互通信&#xff0c;双方就必须基于相同的方法。比如…

【论文阅读】--Popup-Plots: Warping Temporal Data Visualization

弹出图&#xff1a;扭曲时态数据可视化 摘要1 引言2 相关工作3 弹出图3.1 椭球模型3.1.1 水平轨迹3.1.2 垂直轨迹3.1.3 组合轨迹 3.2 视觉映射与交互 4 实施5 结果6 评估7 讨论8 结论和未来工作致谢参考文献 期刊: IEEE Trans. Vis. Comput. Graph.&#xff08;发表日期: 2019&…

【TS】Typescript 中,什么是函数重载

在JavaScript中&#xff0c;传统上并没有直接支持函数重载&#xff08;Function Overloading&#xff09;的概念&#xff0c;这是许多其他面向对象编程语言&#xff08;如Java、C#、C等&#xff09;的一个特性。函数重载意味着可以使用相同的函数名但不同的参数列表&#xff08…

1.3.数据的表示

定点数 原码 最高位是符号位&#xff0c;0表示正号&#xff0c;1表示负号&#xff0c;其余的n-1位表示数值的绝对值。 数值0的原码表示有两种形式&#xff1a; [0]原0 0000000 [-0]原1 0000000 例&#xff1a;1010 最高位为1表示这是一个负数&#xff0c; 其它三位 010…

HQChart使用教程30-K线图如何对接第3方数据41-分钟K线叠加股票增量更新

HQChart使用教程30-K线图如何对接第3方数据40-日K叠加股票增量更新 叠加股票叠加分钟K线更新Request 字段说明Data.symbol 协议截图返回json数据结构overlaydata HQChart代码地址交流 叠加股票 示例地址:https://jones2000.github.io/HQChart/webhqchart.demo/samples/kline_i…

可以一键生成热点营销视频的工具,建议收藏

在当今的商业环境中&#xff0c;热点营销已经成为了一种非常重要的营销策略。那么&#xff0c;什么是热点营销呢&#xff1f;又怎么做热点营销视频呢&#xff1f; 最近高考成绩慢慢公布了&#xff0c;领导让结合“高考成绩公布”这个热点&#xff0c;做一个关于企业或产品的营销…

运用 Offer 管理来提高候选人感受的关键点

一些公司不遗余力地为应聘者提供一流的感受&#xff0c;通过建立个性化的求职网站、简单的处理流程和合作的面试流程。然而&#xff0c;由于Offer管理缓慢笨拙&#xff0c;所有这些好工作都可能失败。 如果申请人想等几天才能得到你的录取通知书&#xff0c;而你的录取通知书必…

鸿蒙NEXT开发:工具常用命令—install

安装三方库。 命令格式 ohpm install [options] [[<group>/]<pkg>[<version> | tag:<tag>]] ... ohpm install [options] <folder> ohpm install [options] <har file> alias: i 说明 group&#xff1a;三方库的命名空间&#xff0c;可…

sys.stdin对象——实现标准输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 sys.stdin是一个标准化输入对象&#xff0c;可以连续输入或读入文件所有内容&#xff0c;不结束&#xff0c;不能直接使用。输入完成后&am…

print()函数——打印输出

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 print()函数是Python编程最常见的函数&#xff0c;常用于输出程序结果&#xff0c;默认输出到屏幕&#xff0c;也可以输出到指定文件。 语法参考 pr…

吉他谱制作软件哪个好 吉他弹唱谱制作软件推荐

在市面上存在着多种吉他谱制作软件&#xff0c;如何选择一款适合自己需求的软件成为了许多人面临的挑战。下面来看看吉他谱制作软件哪个好&#xff0c;吉他弹唱谱制作软件推荐的相关内容。 一、吉他谱制作软件哪个好 吉他谱制作软件在现代音乐创作中扮演着重要角色&#xff0c…

调频信号FM的原理与matlab与FPGA实现

平台&#xff1a;matlab r2021b&#xff0c;vivado2023.1 本文知识内容摘自《软件无线电原理和应用》 调频(FM)是载波的瞬时频率随调制信号成线性变化的一种调制方式&#xff0c;音频调频信号的数学表达式可以写为&#xff1a; Fm频率调制&#xff0c;载波的幅度随着调制波形…

open()函数——打开文件并返回文件对象

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 open()函数用于打开文件&#xff0c;返回一个文件读写对象&#xff0c;然后可以对文件进行相应读写操作。 语法参考 open()函数的语法格式如下&…