把非未来函数变成未来函数?

bejyjqdl  于 2021-06-09  发布在  Cassandra
关注(0)|答案(0)|浏览(270)

我继承了一个生 rust 的应用程序,我想做一个小的修改。目前,它使用期货以以下方式从cassandra检索记录:


# [derive(Debug, Serialize, Deserialize, Clone)]

pub struct Item {
    pub a: String,
    pub b: f64,
}

# [derive(Debug)]

pub enum DataSetError {
    CassandraError(cassandra_cpp::Error),
}

pub type Result<T> = std::result::Result<T, DataSetError>;

pub fn select_cass_items(
    session: &Session,
    a: String,
) -> impl Future<Output = Result<Vec<Item>>> + Unpin {
    let table = envmnt::get_or("TABLE", "ab_table");
    let mut statement = stmt!(&("SELECT a, b FROM ".to_owned() + &table + " WHERE a = ?"));
    statement.bind(0, a).unwrap();

    session.execute(&statement).map(|result| {
        result
            .map(|rows| {
                rows.iter()
                    .map(|row| Item {
                        a: row.get_by_name("a").unwrap(),
                        b: row.get_by_name("b").unwrap(),
                    })
                    .collect()
            })
            .map_err(|e| {
                warn!("[select_cass_items] {:?}", e);
                DataSetError::CassandraError(e)
            })
    })
}

我想添加选项做同样的事情,但从Parquet文件。我已经编写了一个简单的非未来函数(如下),它与cassandra函数执行等效的读取/过滤操作。我已经证实了它的工作原理。

pub fn read_parquet_file (
        a: String)
    -> Vec<Item> {
        let reader = SerializedFileReader::try_from("/path/to/file.parquet".to_string()).unwrap();
        let iter = reader.get_row_iter(None).unwrap();

        iter.filter_map(|row| {
            if row.get_string(0).unwrap() == &a {
                Some(Item {
                    a: row.get_string(0).unwrap().to_string(),
                    b: row.get_double(1).unwrap(),
                })
            }
            else {
                None
            }
        }).collect::<Vec<_>>()

}

问题是:如何将非未来的parquet函数转换为未来cassandra函数的替代品?我看到cassandraècpp板条箱支持未来,但Parquet地板不支持。一定有办法吗?然而,我是一个铁 rust 新手,我找不到任何例子接近什么,我想能够mogrife我的工作到我需要的。我试过很多东西,但都是死胡同,不值得分享。
谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题