0

我正在尝试使用使用 wasm-bindgen 创建的 Web 程序集来实现一个简单的 Web 应用程序。我对 Rust 完全陌生。

该网页将有一个文件输入元素来选择一个 CSV 文件。Web 汇编代码将加载此 CSV 并使用极坐标对数据进行分组、排序、过滤等,然后将结果呈现回客户端(直接在网页上或通过与 JS 代码共享数据)

以下是 Web 程序集的代码:

mod utils;

use wasm_bindgen::JsCast;
use wasm_bindgen::prelude::*;
use polars::prelude::*;
use std::io::Cursor;
use js_sys::JsString;
use polars_lazy::prelude::col;

#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;

#[wasm_bindgen]
pub fn load_file(file_input : web_sys::HtmlInputElement) {

    let filelist = file_input.files().expect("Failed to get filelist from File Input!");
    if filelist.length() < 1 {        
        return;
    }
    if filelist.get(0) == None {        
        return;
    }
    let file = filelist.get(0).expect("Failed to get File from filelist!");
    let file_reader : web_sys::FileReader = match web_sys::FileReader::new() {
        Ok(f) => f,
        Err(e) => {
            web_sys::FileReader::new().expect("")
        }
    };   
   
    let fr_c = file_reader.clone();
    let onloadend_cb = Closure::wrap(Box::new(move |_e: web_sys::ProgressEvent| {
        let data = fr_c.result().unwrap();
        let file_string: JsString = data.dyn_into::<JsString>().unwrap();
        let file_vec: Vec<u8> = file_string.iter().map(|x| x as u8).collect();
        let cursor = Cursor::new(file_vec);
        let df = CsvReader::new(cursor)
        .has_header(true)
        .finish().unwrap()
        .groupby(col("name"));
    }) as Box<dyn Fn(web_sys::ProgressEvent)>);

    file_reader.set_onloadend(Some(onloadend_cb.as_ref().unchecked_ref()));
    file_reader.read_as_array_buffer(&file).expect("blob not readable");
    onloadend_cb.forget();
}


编译器在线显示错误 .groupby(col("name"))

error[E0277]: `Expr` is not an iterator
   --> src\lib.rs:41:18
    |
41  |         .groupby(col("name"));
    |          ------- ^^^^^^^^^^^ expected an implementor of trait `IntoIterator`
    |          |
    |          required by a bound introduced by this call
    |

我不明白错误的原因是什么。它建议在“col”之前添加“&”,但它没有帮助。

有谁知道如何修复错误?

4

1 回答 1

0

查看方法的文档和提供的DataFrame::groupby()示例,我们可以看到可以通过字符串数组指定列:

.groupby(["name"])
于 2022-02-04T09:25:43.637 回答