diff --git a/rust/datafusion/Cargo.toml b/rust/datafusion/Cargo.toml
index 11cc63bbdc3..0080bf58ddf 100644
--- a/rust/datafusion/Cargo.toml
+++ b/rust/datafusion/Cargo.toml
@@ -52,7 +52,6 @@ parquet = { path = "../parquet", version = "4.0.0-SNAPSHOT", features = ["arrow"
sqlparser = "0.8.0"
clap = "2.33"
rustyline = {version = "7.0", optional = true}
-crossbeam = "0.8"
paste = "^1.0"
num_cpus = "1.13.0"
chrono = "0.4"
@@ -60,6 +59,7 @@ async-trait = "0.1.41"
futures = "0.3"
pin-project-lite= "^0.2.0"
tokio = { version = "1.0", features = ["macros", "rt", "rt-multi-thread", "sync"] }
+tokio-stream = "0.1"
log = "^0.4"
md-5 = "^0.9.1"
sha2 = "^0.9.1"
diff --git a/rust/datafusion/src/physical_plan/parquet.rs b/rust/datafusion/src/physical_plan/parquet.rs
index 6ab26c2c9e0..348a924040a 100644
--- a/rust/datafusion/src/physical_plan/parquet.rs
+++ b/rust/datafusion/src/physical_plan/parquet.rs
@@ -30,8 +30,7 @@ use super::{
planner::DefaultPhysicalPlanner, ColumnarValue, PhysicalExpr, RecordBatchStream,
SendableRecordBatchStream,
};
-use crate::physical_plan::ExecutionPlan;
-use crate::physical_plan::{common, Partitioning};
+use crate::physical_plan::{common, ExecutionPlan, Partitioning};
use crate::{
error::{DataFusionError, Result},
execution::context::ExecutionContextState,
@@ -55,14 +54,17 @@ use parquet::file::{
statistics::Statistics as ParquetStatistics,
};
-use crossbeam::channel::{bounded, Receiver, RecvError, Sender};
use fmt::Debug;
use parquet::arrow::{ArrowReader, ParquetFileArrowReader};
-use tokio::task;
+use tokio::{
+ sync::mpsc::{channel, Receiver, Sender},
+ task,
+};
+use tokio_stream::wrappers::ReceiverStream;
use crate::datasource::datasource::Statistics;
use async_trait::async_trait;
-use futures::stream::Stream;
+use futures::stream::{Stream, StreamExt};
/// Execution plan for scanning one or more Parquet partitions
#[derive(Debug, Clone)]
@@ -773,9 +775,9 @@ impl ExecutionPlan for ParquetExec {
// because the parquet implementation is not thread-safe, it is necessary to execute
// on a thread and communicate with channels
let (response_tx, response_rx): (
- Sender