Skip to content
This repository was archived by the owner on Dec 29, 2021. It is now read-only.

Commit 22b92be

Browse files
committed
csv writer
1 parent 7b2625e commit 22b92be

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors = ["Neville Dipale <nevilledips@gmail.com>"]
55
edition = "2018"
66

77
[dependencies]
8-
arrow = { git = "https://github.com/nevi-me/arrow", branch="arrow-4386"}
8+
arrow = { git = "https://github.com/nevi-me/arrow", rev = "cb38e68"}
99
# arrow = { path = "../../arrow/rust/arrow"}
1010
num = "0.2"
1111
num-traits = "0.2"

src/dataframe.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,21 @@ impl DataFrame {
428428
Ok(())
429429
}
430430

431+
pub fn to_csv(&self, path: &str) -> Result<(), arrow::error::ArrowError> {
432+
// use csv::error::Error;
433+
use arrow::csv::Writer;
434+
435+
let file = File::create(path)?;
436+
437+
let wrt = Writer::new(file);
438+
439+
let batches = self.to_record_batches();
440+
let batches_ref: Vec<&RecordBatch> = batches.iter().map(|b| b).collect();
441+
442+
wrt.write(batches_ref)?;
443+
444+
Ok(())
445+
}
431446
}
432447

433448
mod tests {
@@ -536,4 +551,37 @@ mod tests {
536551
let write = dataframe.to_feather("./test/data/uk_cities");
537552
assert!(write.is_ok());
538553
}
554+
555+
#[test]
556+
fn csv_io() {
557+
let mut dataframe = DataFrame::from_csv("./test/data/uk_cities_with_headers.csv", None);
558+
let a = dataframe.column_by_name("lat");
559+
let b = dataframe.column_by_name("lng");
560+
let sum = ScalarFunctions::add(column_to_arrays_f64(a), column_to_arrays_f64(b));
561+
// TODO, make this better
562+
let sum: Vec<ArrayRef> = sum
563+
.unwrap()
564+
.into_iter()
565+
.map(|p| Arc::new(p) as ArrayRef)
566+
.collect();
567+
dataframe = dataframe.with_column(
568+
"lat_lng_sum",
569+
Column::from_arrays(sum, Field::new("lat_lng_sum", DataType::Float64, true)),
570+
);
571+
572+
let city = dataframe.column_by_name("city");
573+
let lowercase = ScalarFunctions::lower(column_to_arrays_str(city));
574+
let lowercase: Vec<ArrayRef> = lowercase
575+
.unwrap()
576+
.into_iter()
577+
.map(|p| Arc::new(p) as ArrayRef)
578+
.collect();
579+
dataframe = dataframe.with_column(
580+
"city_lower",
581+
Column::from_arrays(lowercase, Field::new("city_lower", DataType::Utf8, true)),
582+
);
583+
584+
let write = dataframe.to_csv("/tmp/uk_cities_out.csv");
585+
assert!(write.is_ok());
586+
}
539587
}

0 commit comments

Comments
 (0)