gpt4 book ai didi

sql - Rust:使用结构向量的 polars 中的 DataFrame

转载 作者:行者123 更新时间:2023-12-01 23:14:58 25 4
gpt4 key购买 nike

问题

我想将数据读入 polars来自 mysql 的数据框数据库。我正在使用 sqlx .

sqlx生成结构向量,例如:Vec<Country>下面:

来自 sqlx Docs :

// no traits are needed
struct Country { country: String, count: i64 }

let countries = sqlx::query_as!(Country,
"
SELECT country, COUNT(*) as count
FROM users
GROUP BY country
WHERE organization = ?
",
organization
)
.fetch_all(&pool) // -> Vec<Country>
.await?;

// countries[0].country
// countries[0].count

我如何使用这个 Vec<Country>生成极坐标数据框

来自 polars Docs :


use polars_core::prelude::*;
let s0 = Series::new("a", &[1i64, 2, 3]);
let s1 = Series::new("b", &[1i64, 1, 1]);
let s2 = Series::new("c", &[2i64, 2, 2]);
let list = Series::new("foo", &[s0, s1, s2]);

let s0 = Series::new("B", [1, 2, 3]);
let s1 = Series::new("C", [1, 1, 1]);
let df = DataFrame::new(vec![list, s0, s1]).unwrap();

可能的解决方案

我能想到的唯一解决方案是,如果我可以为 Country 中的每一列/数据创建一个系列构造并使用这些单独的系列来创建数据框。

我不知道如何分解 Vec<Country>进入Vec<country>Vec<count>

最佳答案

您可以为此使用构建器或从迭代器中收集。从迭代器收集通常很快,但在这种情况下,它需要您循环 Vec<Country>两次,所以你应该进行基准测试。

下面是显示的两种解决方案的示例函数。

use polars::prelude::*;

struct Country {
country: String,
count: i64,
}

fn example_1(values: &[Country]) -> (Series, Series) {
let ca_country: Utf8Chunked = values.iter().map(|v| &*v.country).collect();
let ca_count: NoNull<Int64Chunked> = values.iter().map(|v| v.count).collect();
let mut s_country: Series = ca_country.into();
let mut s_count: Series = ca_count.into_inner().into();
s_country.rename("country");
s_count.rename("country");
(s_count, s_country)
}

fn example_2(values: &[Country]) -> (Series, Series) {
let mut country_builder = Utf8ChunkedBuilder::new("country", values.len(), values.len() * 5);
let mut count_builder = PrimitiveChunkedBuilder::<Int64Type>::new("count", values.len());

values.iter().for_each(|v| {
country_builder.append_value(&v.country);
count_builder.append_value(v.count)
});

(
count_builder.finish().into(),
country_builder.finish().into(),
)
}

顺便说一句,如果你想要最高性能,我真的推荐 connector-x .它集成了极线和箭头,并且性能非常出色。

关于sql - Rust:使用结构向量的 polars 中的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69112232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com