最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust?duckdb和polars讀csv文件比較情況

 更新時間:2024年06月27日 09:59:00   作者:songroom  
duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗(yàn)好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧

duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì)。1、快;2、客戶體驗(yàn)好,特別是可以同時批量讀csv(在一個目錄下的csv等文件)。polars的性能比pandas有非常多的超越。但背后的一些基于arrow的技術(shù)棧有很多相同之類。今天想比較一下兩者在csv數(shù)據(jù)讀寫的情況。

一、文件準(zhǔn)備

csv樣本內(nèi)容,是N行9列的csv標(biāo)準(zhǔn)格式,有字符串,有浮點(diǎn)數(shù),有整型。具體如下:

在這里插入圖片描述

本次準(zhǔn)備了兩個csv文件,一個大約是2.1萬行、9列;一個是64萬行、9列;模式完全一樣。更大的類似百萬行或千萬行的數(shù)據(jù)目前暫不比較。這種數(shù)據(jù)量級較少。

二、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() {
    let time0 = Instant::now();
    //test.csv:2w行;test2.csv:64w行
    let csvs = ["test.csv","test2.csv"]; 
    for csv in csvs{
        println!("-----------{:?}-------------",csv);
        duckdb_read_csv(csv).unwrap();
        polars_read_csv(csv);
        println!("-----------{:?}-------------",csv);
    }
    println!("duckdb和polars讀文件共花:{:?}秒!",time0.elapsed().as_secs_f32());
}
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取出的行數(shù):{:?} 列數(shù):{:?}",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的行和列數(shù):{:?}",df.shape());
    println!("polars 讀csv 花時: {:?} 秒!", polars_csv_time.elapsed().as_secs_f32());
}

四、輸出

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

結(jié)論:從上面的樣本來看,分別用duckdb和polars來讀csv兩個不同大小的文件,polars有優(yōu)勢。當(dāng)然,也可能是duckdb庫封裝的問題,也可能是文件大小不同,測試代表性還不全。謹(jǐn)供參考!

五、問題

從輸出可以明顯看出,duckdb庫讀出來的num_rows是有問題的。這個問題還待查實(shí)。從print_batches(&rbs).unwrap(),打印出來的內(nèi)容來看,并沒有少。

到此這篇關(guān)于Rust duckdb和polars讀csv文件比較的文章就介紹到這了,更多相關(guān)Rust讀csv文件比較內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust 函數(shù)式編程的具體使用

    Rust 函數(shù)式編程的具體使用

    本文主要介紹了Rust 函數(shù)式編程的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • Rust中的關(guān)聯(lián)類型總結(jié)

    Rust中的關(guān)聯(lián)類型總結(jié)

    關(guān)聯(lián)類型是定義通用trait的一種機(jī)制。它允許在trait中定義一個或多個占位符類型,這些類型將在trait的實(shí)現(xiàn)中具體化。文中有詳細(xì)示例代碼供參考,需要的朋友可以閱讀一下
    2023-05-05
  • Tauri?打開本地文件踩坑分析解決

    Tauri?打開本地文件踩坑分析解決

    這篇文章主要為大家介紹了Tauri?打開本地文件踩坑分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust獲取命令行參數(shù)及IO操作方法

    Rust獲取命令行參數(shù)及IO操作方法

    Rust作為一門系統(tǒng)編程語言,提供了強(qiáng)大且安全的I/O操作支持,本文給大家介紹Rust獲取命令行參數(shù)以及IO操作,感興趣的朋友一起看看吧
    2025-06-06
  • Rust cargo 命令行工具使用示例教程

    Rust cargo 命令行工具使用示例教程

    cargo 是 Rust 的構(gòu)建系統(tǒng)和包管理器,負(fù)責(zé)創(chuàng)建項(xiàng)目、編譯代碼、管理依賴、運(yùn)行測試等,是日常開發(fā)中最常用的工具,這篇文章主要介紹了Rust cargo 命令行工具使用教程,需要的朋友可以參考下
    2025-04-04
  • Rust中類型轉(zhuǎn)換在錯誤處理中的應(yīng)用小結(jié)

    Rust中類型轉(zhuǎn)換在錯誤處理中的應(yīng)用小結(jié)

    隨著項(xiàng)目的進(jìn)展,關(guān)于Rust的故事又翻開了新的一頁,今天來到了服務(wù)器端的開發(fā)場景,發(fā)現(xiàn)錯誤處理中的錯誤類型轉(zhuǎn)換有必要分享一下,對Rust錯誤處理相關(guān)知識感興趣的朋友一起看看吧
    2023-09-09
  • 深入了解Rust中trait的使用

    深入了解Rust中trait的使用

    先前我們提到過?trait,那么Rust中的trait?是啥呢?本文將通過一些示例為大家詳細(xì)講講Rust中trait的使用,感興趣的小伙伴可以了解一下
    2022-11-11
  • Rust處理錯誤的實(shí)現(xiàn)方法

    Rust處理錯誤的實(shí)現(xiàn)方法

    程序在運(yùn)行的過程中,總是會不可避免地產(chǎn)生錯誤,而如何優(yōu)雅地解決錯誤,也是語言的設(shè)計哲學(xué)之一。本文就來和大家來了Rust是如何處理錯誤的,感興趣的可以了解一下
    2023-03-03
  • 深入了解Rust?結(jié)構(gòu)體的使用

    深入了解Rust?結(jié)構(gòu)體的使用

    結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它允許我們將多個不同的類型組合成一個整體。下面我們就來學(xué)習(xí)如何定義和使用結(jié)構(gòu)體,并對比元組與結(jié)構(gòu)體之間的異同,需要的可以參考一下
    2022-11-11
  • Rust語言之結(jié)構(gòu)體和枚舉的用途與高級功能詳解

    Rust語言之結(jié)構(gòu)體和枚舉的用途與高級功能詳解

    Rust 是一門注重安全性和性能的現(xiàn)代編程語言,其中結(jié)構(gòu)體和枚舉是其強(qiáng)大的數(shù)據(jù)類型之一,了解結(jié)構(gòu)體和枚舉的概念及其高級功能,將使你能夠更加靈活和高效地處理數(shù)據(jù),本文將深入探討 Rust 中的結(jié)構(gòu)體和枚舉,并介紹它們的用途和高級功能
    2023-10-10

最新評論

四平市| 桃江县| 宁波市| 杨浦区| 山阳县| 弥渡县| 白城市| 两当县| 庄河市| 溧水县| 大连市| 固安县| 那曲县| 改则县| 成都市| 广丰县| 延边| 盐津县| 苍梧县| 双柏县| 南召县| 会昌县| 宽甸| 双柏县| 瑞安市| 威宁| 从化市| 阜阳市| 雅安市| 德惠市| 资源县| 西乌| 萍乡市| 天等县| 翼城县| 永州市| 绵阳市| 靖远县| 泌阳县| 电白县| 三亚市|