Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 将非未来函数转换为未来函数?_Rust_Cassandra_Parquet - Fatal编程技术网

Rust 将非未来函数转换为未来函数?

Rust 将非未来函数转换为未来函数?,rust,cassandra,parquet,Rust,Cassandra,Parquet,我继承了一个锈迹斑斑的应用程序,我希望对它做一个小小的修改。目前,它使用Futures以以下方式从Cassandra检索记录: #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Item { pub a: String, pub b: f64, } #[derive(Debug)] pub enum DataSetError { CassandraError(cassandra_cpp::Error),

我继承了一个锈迹斑斑的应用程序,我希望对它做一个小小的修改。目前,它使用Futures以以下方式从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)
            })
    })
}

我想添加做同样的事情,但从拼花文件选项。我在下面编写了一个简单的非未来函数,它执行与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<_>>()


}
问题是:如何将非未来拼花地板功能转换为未来Cassandra功能的替代品?我看到板条箱支持未来,但create不支持。肯定有办法做到这一点吗?然而,我是一个铁锈新手,我找不到任何足够接近我想要的,能够将我的工作转化为我需要的东西的例子。我尝试过各种方法,但都是死路一条,不值得分享


谢谢大家!

您可以阻止函数上的\u,使其在另一个线程或任务中运行,并获得该结果的未来。不要只将代码包装为异步,因为这样它将阻止当前任务。您可以阻止函数上的\u,使其在另一个线程或任务中运行,不要仅仅用异步方式包装代码,因为这样会阻塞当前任务。