欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、文件準備

csv樣本內容,是N行9列的csv標準格式,有字符串,有浮點數,有整型。具體如下:

在這里插入圖片描述

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

二、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取出的行數:{:?} 列數:{:?}",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有優(yōu)勢。當然,也可能是duckdb庫封裝的問題,也可能是文件大小不同,測試代表性還不全。謹供參考!

五、問題

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

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

您可能感興趣的文章:

相關文章

  • Rust語言數據類型的具體使用

    Rust語言數據類型的具體使用

    在Rust中,每個值都有一個明確的數據類型,本文主要介紹了Rust語言數據類型的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Rust編寫自動化測試實例權威指南

    Rust編寫自動化測試實例權威指南

    這篇文章主要為大家介紹了Rust編寫自動化測試實例權威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Rust動態(tài)數組Vec基本概念及用法

    Rust動態(tài)數組Vec基本概念及用法

    Rust中的Vec是一種動態(tài)數組,它可以在運行時自動調整大小,本文主要介紹了Rust動態(tài)數組Vec基本概念及用法,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Rust版本號的使用方法詳解

    Rust版本號的使用方法詳解

    在 Rust 項目中,版本號的使用遵循語義版本控制(Semantic Versioning)原則,確保版本號的變化能準確反映代碼的變更情況,本文給大家詳細解釋了Rust版本號用法,需要的朋友可以參考下
    2024-01-01
  • Rust 能夠取代 C 語言嗎

    Rust 能夠取代 C 語言嗎

    Rust 是 Mozilla 基金會的一個雄心勃勃的項目,號稱是 C 語言和 C++ 的繼任者,這篇文章主要介紹了Rust 能夠取代 C 語言嗎的相關知識,需要的朋友可以參考下
    2020-06-06
  • Rust裸指針的安全性實例講解

    Rust裸指針的安全性實例講解

    裸指針是一個不包含所有權和借用關系的原始指針,它們與常規(guī)指針相比沒有任何限制和保護措施,這篇文章主要介紹了Rust裸指針的安全性實例,需要的朋友可以參考下
    2023-05-05
  • Rust 數據分析利器polars用法詳解

    Rust 數據分析利器polars用法詳解

    這篇文章主要介紹了Rust 數據分析利器polars用法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-08-08
  • rust流程控制的具體使用

    rust流程控制的具體使用

    在Rust中,控制流包括條件語句、循環(huán)和匹配模式等,用于實現程序的邏輯和流程控制,本文就來詳細的介紹一下,感興趣的可以了解一下
    2023-12-12
  • 使用Rust采集天氣預報信息并實現實時更新數據功能

    使用Rust采集天氣預報信息并實現實時更新數據功能

    Rust作為一種高效、安全的編程語言,可以用于開發(fā)各種應用,包括天氣預報采集系統(tǒng),本文將探討如何使用Rust來采集天氣預報信息,并實現實時更新數據的功能,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 如何用Rust打印hello world

    如何用Rust打印hello world

    這篇文章主要介紹了如何用Rust打印hello world,本文分步驟通過圖文并茂的形式給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論