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.pswp.cn/diannao/35872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35872.shtml
英文地址,請注明出處:http://en.pswp.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()函數的語法格式如下&…