Browse Source

Adding conversion from `ArrayData` for simpler conversion and adding `Vec<u8>` conversion

tags/v0.3.1-rc
haixuanTao 2 years ago
parent
commit
127a8a313c
1 changed files with 25 additions and 1 deletions
  1. +25
    -1
      libraries/arrow-convert/src/from_impls.rs

+ 25
- 1
libraries/arrow-convert/src/from_impls.rs View File

@@ -1,5 +1,5 @@
use arrow::{
array::{Array, AsArray, PrimitiveArray, StringArray},
array::{make_array, Array, AsArray, PrimitiveArray, StringArray},
datatypes::ArrowPrimitiveType,
};
use eyre::ContextCompat;
@@ -18,6 +18,18 @@ impl From<arrow::array::ArrayRef> for ArrowData {
}
}

impl From<ArrowData> for arrow::array::ArrayData {
fn from(value: ArrowData) -> Self {
value.0.to_data()
}
}

impl From<arrow::array::ArrayData> for ArrowData {
fn from(value: arrow::array::ArrayData) -> Self {
Self(make_array(value))
}
}

impl TryFrom<&ArrowData> for bool {
type Error = eyre::Report;
fn try_from(value: &ArrowData) -> Result<Self, Self::Error> {
@@ -136,6 +148,18 @@ impl<'a> TryFrom<&'a ArrowData> for &'a [u8] {
}
}

impl<'a> TryFrom<&'a ArrowData> for Vec<u8> {
type Error = eyre::Report;
fn try_from(value: &'a ArrowData) -> Result<Self, Self::Error> {
let array: &PrimitiveArray<arrow::datatypes::UInt8Type> =
value.as_primitive_opt().wrap_err("not a primitive array")?;
if array.null_count() != 0 {
eyre::bail!("array has nulls");
}
Ok(array.values().to_vec())
}
}

fn extract_single_primitive<T>(array: &PrimitiveArray<T>) -> Result<T::Native, eyre::Error>
where
T: ArrowPrimitiveType,


Loading…
Cancel
Save