`CometBenchmarkBase.runExpressionBenchmark` checks the initial AQE plan, not the executed plan
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 55/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- scala, spark
- Lĩnh vực
- performance, testing
Hướng nghiên cứu
Read spark/src/test/scala/org/apache/spark/sql/benchmark/CometBenchmarkBase.scala and spark/src/test/scala/org/apache/spark/sql/comet/CometPlanChecker.scala. Start by checking how the benchmark executes its DataFrame and how the plan checker traverses AQE query stages. Done means the check inspects the final executed plan, recognizes the AQE wrapper nodes, and reports any non-native operator in that plan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
Before timing a case, runExpressionBenchmark in
spark/src/test/scala/org/apache/spark/sql/benchmark/CometBenchmarkBase.scala checks that the
Comet plan is fully native:
// Check that the plan is fully Comet native before running the benchmark. Unlike the check
// above this one does execute the query, because AQE can re-plan a join after the first
// stage completes and the Comet operators are what we are checking for.
withSQLConf(cometConfigs: _*) {
val df = spark.sql(query)
df.noop()
val plan = stripAQEPlan(df.queryExecution.executedPlan)
findFirstNonCometOperator(plan).foreach { op => ...
df.noop() runs a separate write query. It does not execute df's own plan. After it,
df.queryExecution.executedPlan is still AdaptiveSparkPlan isFinalPlan=false, and
stripAQEPlan returns the initial plan. The check therefore never sees what AQE changes during
execution, which is what the comment says it is checking for. The warning it prints shows the
initial plan, not the plan that ran.
Steps to reproduce
Run on main (0f7f8e453) with the default profile (Spark 4.1.3), in a CometBenchmarkBase
subclass, over a Parquet table of 4096 rows made with
spark.range(4096).selectExpr("id % 10 AS k", "id AS v"), with
spark.comet.exec.shuffle.enabled=false. The query is SELECT k, sum(v) FROM t GROUP BY k.
- With the three lines above, after
df.noop(),df.queryExecution.executedPlanis
AdaptiveSparkPlan isFinalPlan=false. The plan that the check reads, and that the warning
prints, is
HashAggregate>Exchange>CometHashAggregate>CometNativeScan.
It has noCometColumnarToRow,AQEShuffleReadorShuffleQueryStage. - For a second DataFrame of the same query, after
collect(),
executedPlanisAdaptiveSparkPlan isFinalPlan=true, and the plan is
ResultQueryStage>HashAggregate>AQEShuffleRead coalesced>ShuffleQueryStage>
Exchange>CometColumnarToRow>CometHashAggregate>CometNativeScan.
Expected behavior
The check reads the plan that ran, after AQE has finished, and the warning prints that plan.
Additional context
Executing the DataFrame's own plan, for example with
df.queryExecution.executedPlan.execute().foreach(_ => ()), makes the plan final. The final plan
contains query stages. findFirstNonCometOperator in
spark/src/test/scala/org/apache/spark/sql/comet/CometPlanChecker.scala walks the plan with
foreach, which does not descend into a QueryStageExec (a leaf node), and its allow-list
contains neither QueryStageExec nor AQEShuffleReadExec. So a fix also needs the walk to go
into the query stages, for example through AdaptiveSparkPlanHelper, and to allow the AQE
wrapper nodes.
🤖 Generated with Claude Code
- Ngôn ngữ chính
- Scala
- Star
- 1.3k
- Fork
- 414
- Merge trung bình
- 3 ngày 5 giờ
- Pull request đã merge (30 ngày)
- 210
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/datafusion-comet
-
bug priority:medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
apache/datafusion-comet#7559 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
area:writer bug priority:low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7558 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7557 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
`rand` and `randn` with an integer seed fall back to Spark without a fallback reasonCó thể đã có người làm @galaxytemple đã nhận 3 ngày trước. Đang mởrequires-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7479 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 2 ngày
-
area:writer enhancement requires-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
apache/datafusion-comet#7463 ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của apache/datafusion-comet
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
chipsalliance/rocket-chip#3845 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 13 ngày
-
gesticulate: the `FastInfoset` suffix is written `fast-infoset`, not the registered `fastinfoset`Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
propensive/soundness#2437 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
ergoplatform/ergo#2918 ·
Maintainer thường phản hồi trong vòng 2 ngày