diff --git a/datafusion-examples/examples/csv_dataframe.rs b/datafusion-examples/examples/csv_dataframe.rs new file mode 100644 index 000000000000..8f79bd7394e8 --- /dev/null +++ b/datafusion-examples/examples/csv_dataframe.rs @@ -0,0 +1,48 @@ +// 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. + +use datafusion::error::Result; +use datafusion::functions_aggregate::count::count; +use datafusion::prelude::*; + +/// This example demonstrates executing a DataFrame operation against an Arrow data source (CSV) and +/// fetching results. See `csv_sql.rs` for a SQL version of this example. +#[tokio::main] +async fn main() -> Result<()> { + // create local execution context + let ctx = SessionContext::new(); + + let testdata = datafusion::test_util::arrow_test_data(); + + // execute the query + let df = ctx + .read_csv( + &format!("{testdata}/csv/aggregate_test_100.csv"), + CsvReadOptions::new(), + ) + .await? + .filter(col("c11").gt(lit(0.1)).and(col("c11").lt(lit(0.9))))? + .aggregate( + vec![col("c1")], + vec![min(col("c12")), max(col("c12")), count(wildcard())], + )?; + + // print the results + df.show().await?; + + Ok(()) +} diff --git a/datafusion-examples/examples/csv_sql.rs b/datafusion-examples/examples/csv_sql.rs index ce602e0e4816..304eadc3690e 100644 --- a/datafusion-examples/examples/csv_sql.rs +++ b/datafusion-examples/examples/csv_sql.rs @@ -19,7 +19,7 @@ use datafusion::error::Result; use datafusion::prelude::*; /// This example demonstrates executing a simple query against an Arrow data source (CSV) and -/// fetching results +/// fetching results. See `csv_dataframe.rs` for a DataFrame version of this example. #[tokio::main] async fn main() -> Result<()> { // create local execution context @@ -38,7 +38,7 @@ async fn main() -> Result<()> { // execute the query let df = ctx .sql( - "SELECT c1, MIN(c12), MAX(c12) \ + "SELECT c1, MIN(c12), MAX(c12), COUNT(*) \ FROM aggregate_test_100 \ WHERE c11 > 0.1 AND c11 < 0.9 \ GROUP BY c1",