blob: 59aa9847a1f6f5867362bf58c20a2c4a2b58b25b [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#' @include R6.R
#' @title class arrow::ipc::RecordBatchWriter
#'
#' @usage NULL
#' @format NULL
#' @docType class
#'
#' @section Methods:
#'
#' - `$write_batch(batch)`: Write record batch to stream
#' - `$write_table(table)`: write Table to stream
#' - `$close()`: close stream
#'
#' @section Derived classes:
#'
#' - [arrow::ipc::RecordBatchStreamWriter][arrow__ipc__RecordBatchStreamWriter] implements the streaming binary format
#' - [arrow::ipc::RecordBatchFileWriter][arrow__ipc__RecordBatchFileWriter] implements the binary file format
#'
#' @rdname arrow__ipc__RecordBatchWriter
#' @name arrow__ipc__RecordBatchWriter
`arrow::ipc::RecordBatchWriter` <- R6Class("arrow::ipc::RecordBatchWriter", inherit = `arrow::Object`,
public = list(
write_batch = function(batch) ipc___RecordBatchWriter__WriteRecordBatch(self, batch),
write_table = function(table) ipc___RecordBatchWriter__WriteTable(self, table),
write = function(x) {
if (inherits(x, "arrow::RecordBatch")) {
self$write_batch(x)
} else if (inherits(x, "arrow::Table")) {
self$write_table(x)
} else if (inherits(x, "data.frame")) {
self$write_table(table(x))
} else {
abort("unexpected type for RecordBatchWriter$write(), must be an arrow::RecordBatch or an arrow::Table")
}
},
close = function() ipc___RecordBatchWriter__Close(self)
)
)
#' @title class arrow::ipc::RecordBatchStreamWriter
#'
#' Writer for the Arrow streaming binary format
#'
#' @usage NULL
#' @format NULL
#' @docType class
#'
#' @section usage:
#'
#' ```
#' writer <- RecordBatchStreamWriter(sink, schema)
#'
#' writer$write_batch(batch)
#' writer$write_table(table)
#' writer$close()
#' ```
#'
#' @section Factory:
#'
#' The [RecordBatchStreamWriter()] function creates a record batch stream writer.
#'
#' @section Methods:
#' inherited from [arrow::ipc::RecordBatchWriter][arrow__ipc__RecordBatchWriter]
#'
#' - `$write_batch(batch)`: Write record batch to stream
#' - `$write_table(table)`: write Table to stream
#' - `$close()`: close stream
#'
#' @rdname arrow__ipc__RecordBatchStreamWriter
#' @name arrow__ipc__RecordBatchStreamWriter
`arrow::ipc::RecordBatchStreamWriter` <- R6Class("arrow::ipc::RecordBatchStreamWriter", inherit = `arrow::ipc::RecordBatchWriter`)
#' Writer for the Arrow streaming binary format
#'
#' @param sink Where to write. Can either be:
#'
#' - A string, meant as a file path, passed to [fs::path_abs()]
#' - a [file path][fs::path_abs()]
#' - [arrow::io::OutputStream][arrow__io__OutputStream]
#'
#' @param schema The [arrow::Schema][arrow__Schema] for data to be written.
#'
#' @return a [arrow::ipc::RecordBatchStreamWriter][arrow__ipc__RecordBatchStreamWriter]
#'
#' @export
RecordBatchStreamWriter <- function(sink, schema) {
UseMethod("RecordBatchStreamWriter")
}
#' @export
RecordBatchStreamWriter.character <- function(sink, schema){
RecordBatchStreamWriter(fs::path_abs(sink), schema)
}
#' @export
RecordBatchStreamWriter.fs_path <- function(sink, schema){
RecordBatchStreamWriter(FileOutputStream(sink), schema)
}
#' @export
`RecordBatchStreamWriter.arrow::io::OutputStream` <- function(sink, schema){
assert_that(inherits(schema, "arrow::Schema"))
shared_ptr(`arrow::ipc::RecordBatchStreamWriter`, ipc___RecordBatchStreamWriter__Open(sink, schema))
}
#' @title class arrow::ipc::RecordBatchFileWriter
#'
#' Writer for the Arrow binary file format
#'
#' @usage NULL
#' @format NULL
#' @docType class
#'
#' @section usage:
#'
#' ```
#' writer <- RecordBatchFileWriter(sink, schema)
#'
#' writer$write_batch(batch)
#' writer$write_table(table)
#' writer$close()
#' ```
#'
#' @section Factory:
#'
#' The [RecordBatchFileWriter()] function creates a record batch stream writer.
#'
#' @section Methods:
#' inherited from [arrow::ipc::RecordBatchWriter][arrow__ipc__RecordBatchWriter]
#'
#' - `$write_batch(batch)`: Write record batch to stream
#' - `$write_table(table)`: write Table to stream
#' - `$close()`: close stream
#'
#' @rdname arrow__ipc__RecordBatchFileWriter
#' @name arrow__ipc__RecordBatchFileWriter
`arrow::ipc::RecordBatchFileWriter` <- R6Class("arrow::ipc::RecordBatchFileWriter", inherit = `arrow::ipc::RecordBatchStreamWriter`)
#' Create a record batch file writer from a stream
#'
#' @param sink Where to write. Can either be:
#'
#' - character vector of length one
#' - a [file path][fs::path_abs()]
#' - [arrow::io::OutputStream][arrow__io__OutputStream]
#'
#' @param schema The [arrow::Schema][arrow__Schema] for data to be written.
#'
#' @return an `arrow::ipc::RecordBatchWriter` object
#'
#' @export
RecordBatchFileWriter <- function(sink, schema) {
UseMethod("RecordBatchFileWriter")
}
#' @export
RecordBatchFileWriter.character <- function(sink, schema){
RecordBatchFileWriter(fs::path_abs(sink), schema)
}
#' @export
RecordBatchFileWriter.fs_path <- function(sink, schema){
RecordBatchFileWriter(FileOutputStream(sink), schema)
}
#' @export
`RecordBatchFileWriter.arrow::io::OutputStream` <- function(sink, schema){
assert_that(inherits(schema, "arrow::Schema"))
shared_ptr(`arrow::ipc::RecordBatchFileWriter`, ipc___RecordBatchFileWriter__Open(sink, schema))
}