Skip to content

Commit 83b995e

Browse files
committed
fixes for streaming
1 parent 44e7d8a commit 83b995e

5 files changed

Lines changed: 15 additions & 32 deletions

File tree

spark/src/main/scala/org/apache/comet/parquet/CometParquetFileFormat.scala

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,9 @@ class CometParquetFileFormat(session: SparkSession, scanImpl: String)
6161
extends ParquetFileFormat
6262
with MetricsSupport
6363
with ShimSQLConf {
64-
if (scanImpl == CometConf.SCAN_NATIVE_COMET) {
65-
metrics = CometMetricNode.parquetScanMetrics(session.sparkContext)
66-
} else {
67-
metrics = CometMetricNode.nativeScanMetrics(session.sparkContext)
68-
}
64+
metrics =
65+
CometMetricNode.nativeScanMetrics(session.sparkContext) ++ CometMetricNode.parquetScanMetrics(
66+
session.sparkContext)
6967

7068
override def shortName(): String = "parquet"
7169
override def toString: String = "CometParquet"

spark/src/main/scala/org/apache/comet/parquet/CometParquetScan.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ object CometParquetScan {
8686
partitionFilters = scan.partitionFilters,
8787
dataFilters = scan.dataFilters) with CometParquetScan
8888

89-
// TODO: Change this when we support DataFusion reader for Parquet in V2
90-
newScan.metrics = CometMetricNode.parquetScanMetrics(session.sparkContext)
89+
newScan.metrics = CometMetricNode.nativeScanMetrics(session.sparkContext) ++ CometMetricNode
90+
.parquetScanMetrics(session.sparkContext)
9191

9292
newScan
9393
}

spark/src/main/scala/org/apache/spark/sql/comet/CometBatchScanExec.scala

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,11 @@ case class CometBatchScanExec(wrapped: BatchScanExec, runtimeFilters: Seq[Expres
5353
override def doExecuteColumnar(): RDD[ColumnarBatch] = {
5454
val rdd = inputRDD.asInstanceOf[RDD[ColumnarBatch]]
5555

56-
// Can skip the following logic if we're using different metrics to calculate this,
57-
// e.g., Datafusion reader metrics.
58-
if (Seq("numOutputRows", "scanTime").exists(metric => !metrics.contains(metric))) {
59-
return rdd
60-
}
61-
56+
// These metrics are important for streaming solutions.
57+
// despite there being similar metrics published by the native reader.
6258
val numOutputRows = longMetric("numOutputRows")
6359
val scanTime = longMetric("scanTime")
64-
inputRDD.asInstanceOf[RDD[ColumnarBatch]].mapPartitionsInternal { batches =>
60+
rdd.mapPartitionsInternal { batches =>
6561
new Iterator[ColumnarBatch] {
6662

6763
override def hasNext: Boolean = {

spark/src/main/scala/org/apache/spark/sql/comet/CometMetricNode.scala

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,8 @@ object CometMetricNode {
9898
"total time (in ms) spent in this operator"))
9999
}
100100

101-
/**
102-
* SQL Metrics for Comet native ScanExec
103-
*/
104-
def scanMetrics(sc: SparkContext): Map[String, SQLMetric] = {
105-
Map(
106-
"cast_time" ->
107-
SQLMetrics.createNanoTimingMetric(sc, "Total time for casting columns"))
108-
}
109-
110101
def parquetScanMetrics(sc: SparkContext): Map[String, SQLMetric] = {
111102
Map(
112-
"numOutputRows" -> SQLMetrics.createMetric(sc, "number of output rows"),
113-
"scanTime" -> SQLMetrics.createNanoTimingMetric(sc, "scan time"),
114103
"ParquetRowGroups" -> SQLMetrics.createMetric(sc, "num of Parquet row groups read"),
115104
"ParquetNativeDecodeTime" -> SQLMetrics.createNanoTimingMetric(
116105
sc,
@@ -134,6 +123,10 @@ object CometMetricNode {
134123

135124
def nativeScanMetrics(sc: SparkContext): Map[String, SQLMetric] = {
136125
Map(
126+
// Spark metrics for streaming pipelines
127+
"numOutputRows" -> SQLMetrics.createMetric(sc, "number of output rows"),
128+
"scanTime" -> SQLMetrics.createNanoTimingMetric(sc, "scan time"),
129+
// Datafusion reader metrics
137130
"output_rows" -> SQLMetrics.createMetric(sc, "number of output rows"),
138131
"time_elapsed_opening" ->
139132
SQLMetrics.createNanoTimingMetric(sc, "Wall clock time elapsed for file opening"),

spark/src/main/scala/org/apache/spark/sql/comet/CometScanExec.scala

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,11 @@ case class CometScanExec(
259259
protected override def doExecuteColumnar(): RDD[ColumnarBatch] = {
260260
val rdd = inputRDD.asInstanceOf[RDD[ColumnarBatch]]
261261

262-
// Can skip the following logic if we're using different metrics to calculate this,
263-
// e.g., Datafusion reader metrics.
264-
if (Seq("numOutputRows", "scanTime").exists(metric => !metrics.contains(metric))) {
265-
return rdd
266-
}
267-
262+
// These metrics are important for streaming solutions.
263+
// despite there being similar metrics published by the native reader.
268264
val numOutputRows = longMetric("numOutputRows")
269265
val scanTime = longMetric("scanTime")
270-
inputRDD.asInstanceOf[RDD[ColumnarBatch]].mapPartitionsInternal { batches =>
266+
rdd.mapPartitionsInternal { batches =>
271267
new Iterator[ColumnarBatch] {
272268

273269
override def hasNext: Boolean = {

0 commit comments

Comments
 (0)