0

来自 python 的完整 rust 初学者。我想使用 rust-polars 来读取压缩的 GTF (*.gtf.gz) 文件:

    let schema = Arc::new(Schema::new(vec![
        Field::new("contigName", DataType::Categorical),
        Field::new("source", DataType::Utf8),
        Field::new("feature", DataType::Categorical),
        Field::new("start", DataType::Int64),
        Field::new("end", DataType::Int64),
        Field::new("score", DataType::Float32),
        Field::new("strand", DataType::Categorical),
        Field::new("frame", DataType::Categorical),
        Field::new("attribute", DataType::Utf8),
    ]));

    let mut df = CsvReader::from_path(r).unwrap()
        .with_delimiter(b'\t')
        .with_schema(&schema)
        .with_comment_char(Some(b'#'))
        .with_n_threads(Some(1)) // comment for multithreading
        .with_encoding(CsvEncoding::LossyUtf8)
        .has_header(false)
        .finish()?;

    let test = df.head(Some(10));
    println!("{}", test);

但是,我最终遇到了一些问题:

  • 如何告诉 Polars 文件已压缩?
    我尝试传递io::BufReader::new(GzDecoder::new(f))而不是文件,但失败了。
  • 如何解析分类列?
  • 如何处理可能丢失或附加的列?
  • 如何读取以“#”为标题、以“##”为注释的文件?
4

1 回答 1

1

您好,这里有几个问题。我会尽量回答我能回答的。

如何告诉 Polars 文件已压缩?

你不必。您只需要使用decompressdecompress-fast功能标志编译极坐标。(第一个是 rust native,后者需要一个 c 编译器)。

如何解析分类列

您将架构设置为DataType::Categorical,或者您首先解析为Utf8,然后再进行转换。

df.may_apply("some_utf8_column", |s| s.cast(&DataType::Categorical));

如何处理可能丢失或附加的列?

不知道你说的手柄是什么意思?

如何读取以“#”为标题、以“##”为注释的文件?

Polars 目前只允许一个评论字符。您可以设置此注释字符,并且以该字符开头的每一行都将被忽略。

于 2021-10-19T14:21:09.103 回答