英文:
I'm using Polars with ConnectorX: why do I get Dataframe type error
问题
我试图从Postgres数据库中获取表格描述。我使用ConnectorX与Arrow2目标,尝试将其存储在Polars Dataframe中。
这是连接定义:
use connectorx::prelude::*;
use polars_core;
use std::convert::TryFrom;
let source_conn = SourceConn::try_from(
"postgresql://postgres:postgres@127.0.0.1:5432/oceanics?cxprotocol=binary",
).expect("parse conn str failed");
let queries = &[CXQuery::from(
"SELECT * FROM information_schema.columns where table_name = 'spicyperfmanager'",
)];
let destination: Arrow2Destination =
get_arrow2(&source_conn, None, queries).expect("run failed");
然后我尝试从查询中提取数据:
let df: polars_core::frame::DataFrame = destination.polars().unwrap();
println!("{:?}", df);
但我收到以下错误:
error[E0308]: mismatched types
--> src/data.rs:16:45
|
16 | let df: polars_core::frame::DataFrame = destination.polars().unwrap();
| ----------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `DataFrame`, found `polars_core::frame::DataFrame`
| |
| expected due to this
|
= note: `polars_core::frame::DataFrame` and `DataFrame` have similar names, but are actually distinct types
这是Cargo依赖项:
[dependencies]
connectorx = { version = "0.3.1", features = ["dst_arrow", "src_postgres", "dst_arrow2"] }
polars-core = "0.30.0"
我尝试过使用polars::prelude
的DataFrame,也尝试过使用polars-core::frame
的DataFrame,但似乎无法理解我在类型方面做错了什么。
英文:
I'm trying to get the table description from a Postgres database. I use ConnectorX with Arrow2 destination and I'm trying to store it in a Polars Dataframe.
Here's the connection definition:
use connectorx::prelude::*;
use polars_core;
use std::convert::TryFrom;
let source_conn = SourceConn::try_from(
"postgresql://postgres:postgres@127.0.0.1:5432/oceanics?cxprotocol=binary",
)
.expect("parse conn str failed");
let queries = &[CXQuery::from(
"SELECT * FROM information_schema.columns where table_name = 'spicyperfmanager'",
)];
let destination: Arrow2Destination =
get_arrow2(&source_conn, None, queries).expect("run failed");
Then I try to extract the data from the query:
let df: polars_core::frame::DataFrame = destination.polars().unwrap();
println!("{:?}", df);
But I get the following error:
error[E0308]: mismatched types
--> src/data.rs:16:45
|
16 | let df: polars_core::frame::DataFrame = destination.polars().unwrap();
| ----------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `DataFrame`, found `polars_core::frame::DataFrame`
| |
| expected due to this
|
= note: `polars_core::frame::DataFrame` and `DataFrame` have similar names, but are actually distinct types
Here's the cargo dependencies:
[dependencies]
connectorx = { version = "0.3.1", features = ["dst_arrow", "src_postgres", "dst_arrow2"] }
polars-core = "0.30.0"
I tried using the polars::prelude
DataFrame, the polars-core::frame
DataFrame, but I can't seem to wrap my head around what I'm doing wrong with the typing.
答案1
得分: 1
connectorx
使用的是 polars
版本 v0.20.0,与 v0.30.0 不兼容。因此,实际上您有 两个 版本的 polars
,它们的类型不兼容。
将您的 polars
降级到 v0.20.0,然后它应该可以正常工作。
通常,crate 应该公开它们公开导入的 crate,以避免这种情况,但似乎 connectorx
并没有导出它的 polars
或 polars_core
(尽管它公开了 polars_io
、polars_lazy
和 polars_time
)。
英文:
connectorx
uses polars
v0.20.0, and it is incompatible with v0.30.0. So you actually have two versions of polars
, and their types are incompatible.
Downgrade your polars
to v0.20.0, and it should work.
Usually crates should expose the crates they import publicly to avoid situations like that, but it appears connectorx
does not export its polars
or polars_core
(although it does expose polars_io
, polars_lazy
and polars_time
).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论