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"),
    }

  

posted @ 2022-09-15 20:27  CrossPython  阅读(39)  评论(0)    收藏  举报