get single value from arrow array
use std::sync::Arc; use datafusion::arrow::datatypes::{ DataType, Field, Schema}; use datafusion::arrow::record_batch::RecordBatch; use datafusion::arrow::array::StringBuilder; use datafusion::arrow::array::StringArray; #[tokio::main] async fn main(){ // create an arrow array first: let mut sbuilder = StringBuilder::new(100); sbuilder.append_value("a").unwrap(); sbuilder.append_null().unwrap(); sbuilder.append_value("hello").unwrap(); sbuilder.append_value("add").unwrap(); sbuilder.append_value("aaaaaa").unwrap(); let a = sbuilder.finish(); let schema = Arc::new(Schema::new(vec![ Field::new("a", DataType::Utf8, false), ])); let batch = RecordBatch::try_new( schema.clone(), vec![ Arc::new(a), ], ).unwrap(); // print the first column: let firstcol = batch.column(0); println!("{:?}", firstcol); let da = firstcol.as_any(); let da1 = da.downcast_ref::<StringArray>(); let singlevalue3 = da1.unwrap(); let s = singlevalue3.value(3); println!("{:?}",s); }
let c = batch.column(0); let d = c.data_type(); println!("{:?}", d); let e = c.as_any().downcast_ref(); let f: &StringArray = e.unwrap(); println!("{:?}", f); let xxxx = f.value(0); print!("{:?}", xxxx); match d{ DataType::Utf8 => print!("utf8"), _ => print!("unknow"), }