extern crate datafusion;
use datafusion::rel::*;
use datafusion::exec::*;
extern crate serde_json;
fn main() {
let ctx = ExecutionContext::new("./test/data".to_string());
let schema = Schema::new(vec![
Field::new("city", DataType::String, false),
Field::new("lat", DataType::Double, false),
Field::new("lng", DataType::Double, false)]);
let df1 = ctx.load("test/data/uk_cities.csv", &schema).unwrap();
println!("df1: {}", df1.schema().to_string());
let lat = df1.col("lat").unwrap();
let value = Expr::Literal(Value::Double(52.0));
let df2 = df1.filter(lat.gt(&value)).unwrap();
println!("df2: {}", df1.schema().to_string());
let st_point = ctx.udf("ST_Point",vec![
df2.col("lat").unwrap(),
df2.col("lng").unwrap()]);
let df3 = df2.select(vec![st_point]).unwrap();
println!("df3: {}", df1.schema().to_string());
df3.write("_northern_cities.csv").unwrap();
}