Struct StreamWriter
pub struct StreamWriter<W> {
writer: W,
write_options: IpcWriteOptions,
finished: bool,
dictionary_tracker: DictionaryTracker,
data_gen: IpcDataGenerator,
}
Expand description
Arrow Stream Writer
Writes Arrow RecordBatch
es to bytes using the IPC Streaming Format.
§See Also
FileWriter
for writing IPC Files
§Example
let batch = record_batch!(("a", Int32, [1, 2, 3])).unwrap();
// create a new writer, the schema must be known in advance
let mut writer = StreamWriter::try_new(&mut stream, &batch.schema()).unwrap();
// write each batch to the underlying stream
writer.write(&batch).unwrap();
// When all batches are written, call finish to flush all buffers
writer.finish().unwrap();
Fields§
§writer: W
§write_options: IpcWriteOptions
§finished: bool
§dictionary_tracker: DictionaryTracker
§data_gen: IpcDataGenerator
Implementations§
§impl<W> StreamWriter<BufWriter<W>>where
W: Write,
impl<W> StreamWriter<BufWriter<W>>where
W: Write,
pub fn try_new_buffered(
writer: W,
schema: &Schema,
) -> Result<StreamWriter<BufWriter<W>>, ArrowError>
pub fn try_new_buffered( writer: W, schema: &Schema, ) -> Result<StreamWriter<BufWriter<W>>, ArrowError>
Try to create a new stream writer with the writer wrapped in a BufWriter.
See StreamWriter::try_new
for an unbuffered version.
§impl<W> StreamWriter<W>where
W: Write,
impl<W> StreamWriter<W>where
W: Write,
pub fn try_new(
writer: W,
schema: &Schema,
) -> Result<StreamWriter<W>, ArrowError>
pub fn try_new( writer: W, schema: &Schema, ) -> Result<StreamWriter<W>, ArrowError>
Try to create a new writer, with the schema written as part of the header.
Note that there is no internal buffering. See also StreamWriter::try_new_buffered
.
§Errors
An ‘Err’ may be returned if writing the header to the writer fails.
pub fn try_new_with_options(
writer: W,
schema: &Schema,
write_options: IpcWriteOptions,
) -> Result<StreamWriter<W>, ArrowError>
pub fn try_new_with_options( writer: W, schema: &Schema, write_options: IpcWriteOptions, ) -> Result<StreamWriter<W>, ArrowError>
Try to create a new writer with IpcWriteOptions
.
§Errors
An ‘Err’ may be returned if writing the header to the writer fails.
pub fn write(&mut self, batch: &RecordBatch) -> Result<(), ArrowError>
pub fn write(&mut self, batch: &RecordBatch) -> Result<(), ArrowError>
Write a record batch to the stream
pub fn finish(&mut self) -> Result<(), ArrowError>
pub fn finish(&mut self) -> Result<(), ArrowError>
Write continuation bytes, and mark the stream as done
pub fn get_mut(&mut self) -> &mut W
pub fn get_mut(&mut self) -> &mut W
Gets a mutable reference to the underlying writer.
It is inadvisable to directly write to the underlying writer.
pub fn flush(&mut self) -> Result<(), ArrowError>
pub fn flush(&mut self) -> Result<(), ArrowError>
Flush the underlying writer.
Both the BufWriter and the underlying writer are flushed.
pub fn into_inner(self) -> Result<W, ArrowError>
pub fn into_inner(self) -> Result<W, ArrowError>
Unwraps the the underlying writer.
The writer is flushed and the StreamWriter is finished before returning.
§Errors
An ‘Err’ may be returned if an error occurs while finishing the StreamWriter or while flushing the writer.
§Example
// The result we expect from an empty schema
let expected = vec![
255, 255, 255, 255, 48, 0, 0, 0,
16, 0, 0, 0, 0, 0, 10, 0,
12, 0, 10, 0, 9, 0, 4, 0,
10, 0, 0, 0, 16, 0, 0, 0,
0, 1, 4, 0, 8, 0, 8, 0,
0, 0, 4, 0, 8, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0, 0, 0
];
let schema = Schema::empty();
let buffer: Vec<u8> = Vec::new();
let options = IpcWriteOptions::try_new(8, false, MetadataVersion::V5)?;
let stream_writer = StreamWriter::try_new_with_options(buffer, &schema, options)?;
assert_eq!(stream_writer.into_inner()?, expected);
Trait Implementations§
§impl<W> RecordBatchWriter for StreamWriter<W>where
W: Write,
impl<W> RecordBatchWriter for StreamWriter<W>where
W: Write,
§fn write(&mut self, batch: &RecordBatch) -> Result<(), ArrowError>
fn write(&mut self, batch: &RecordBatch) -> Result<(), ArrowError>
§fn close(self) -> Result<(), ArrowError>
fn close(self) -> Result<(), ArrowError>
Auto Trait Implementations§
impl<W> Freeze for StreamWriter<W>where
W: Freeze,
impl<W> RefUnwindSafe for StreamWriter<W>where
W: RefUnwindSafe,
impl<W> Send for StreamWriter<W>where
W: Send,
impl<W> Sync for StreamWriter<W>where
W: Sync,
impl<W> Unpin for StreamWriter<W>where
W: Unpin,
impl<W> UnwindSafe for StreamWriter<W>where
W: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request