Visitar URL original
feat(workflow-operator): name the missing ground-truth column in Sklearn Prediction's error by kz930 · Pull Request #8918 · apache/texera · GitHub
Skip to content

feat(workflow-operator): name the missing ground-truth column in Sklearn Prediction's error - #8918

Open
kz930 wants to merge 2 commits into
apache:mainfrom
kz930:feat/sklearn-prediction-missing-ground-truth
Open

kz930 wants to merge 2 commits into
apache:mainfrom
kz930:feat/sklearn-prediction-missing-ground-truth

Conversation

@kz930

@kz930 kz930 commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this PR?

When Sklearn Prediction's "Ground Truth Attribute Name to Ignore" names a column that is not in the data input, compilation failed with java.util.NoSuchElementException: None.get, which does not tell the user what is wrong. It now fails with "Ground Truth column '' is not in the input table", the same wording MachineLearningScorer uses for its columns.

Any related issues, documentation, discussions?

Closes #8864

How was this PR tested?

Updated the existing test in SklearnPredictionOpDescSpec to check the new message. sbt "WorkflowOperator/testOnly *SklearnPredictionOpDescSpec" passes, and so do scalafmt and scalafix.

Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Claude Opus 5.5)

🤖 Generated with Claude Code

…arn Prediction's error

A ground-truth name that is not in the data input failed compilation with
None.get. Say which column is missing instead, in the wording
MachineLearningScorer already uses.

Closes apache#8864

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Automated Reviewer Suggestions

Based on the git blame history of the changed files, we recommend the following reviewers:

  • No candidates found from git blame history.

@codecov-commenter

codecov-commenter commented Oct 8, 2026 •

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
57 1 56 0
View the full list of 1 ❄️ flaky test(s)
org.apache.texera.amber.engine.e2e.LoopIntegrationSpec::Engine should bind a $i reference after two branches of the loop body meet again

Flake rate in main: 7.14% (Passed 26 times, Failed 2 times)

Stack Traces | 182s run time
com.twitter.util.TimeoutException: 1.minutes+30.seconds
      at com.twitter.util.Promise.ready(Promise.scala:680)
      at com.twitter.util.Promise.result(Promise.scala:689)
      at com.twitter.util.Await$.$anonfun$result$1(Awaitable.scala:155)
      at com.twitter.concurrent.LocalScheduler$Activation.blocking(Scheduler.scala:189)
      at com.twitter.concurrent.LocalScheduler.blocking(Scheduler.scala:256)
      at com.twitter.concurrent.Scheduler$.blocking(Scheduler.scala:85)
      at com.twitter.util.Await$.result(Awaitable.scala:155)
      at org.apache.texera.amber.engine.e2e.TestUtils$.runWorkflowAndReadResults(TestUtils.scala:187)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.runAndGetMaterializedRowCounts(LoopIntegrationSpec.scala:163)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.$anonfun$new$12(LoopIntegrationSpec.scala:405)
      at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
      at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
      at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
      at org.scalatest.Transformer.apply(Transformer.scala:22)
      at org.scalatest.Transformer.apply(Transformer.scala:20)
      at org.scalatest.flatspec.AnyFlatSpecLike$$anon$5.apply(AnyFlatSpecLike.scala:1832)
      at org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
      at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.super$withFixture(LoopIntegrationSpec.scala:108)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.$anonfun$withFixture$1(LoopIntegrationSpec.scala:108)
      at org.scalatest.Retries.withRetry(Retries.scala:343)
      at org.scalatest.Retries.withRetry$(Retries.scala:342)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.withRetry(LoopIntegrationSpec.scala:99)
      at org.scalatest.Retries.withRetry(Retries.scala:203)
      at org.scalatest.Retries.withRetry$(Retries.scala:203)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.withRetry(LoopIntegrationSpec.scala:99)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.withFixture(LoopIntegrationSpec.scala:108)
      at org.scalatest.flatspec.AnyFlatSpecLike.invokeWithFixture$1(AnyFlatSpecLike.scala:1830)
      at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTest$1(AnyFlatSpecLike.scala:1842)
      at org.scalatest.SuperEngine.runTestImpl(Engine.scala:306)
      at org.scalatest.flatspec.AnyFlatSpecLike.runTest(AnyFlatSpecLike.scala:1842)
      at org.scalatest.flatspec.AnyFlatSpecLike.runTest$(AnyFlatSpecLike.scala:1824)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.org$scalatest$BeforeAndAfterEach$$super$runTest(LoopIntegrationSpec.scala:99)
      at org.scalatest.BeforeAndAfterEach.runTest(BeforeAndAfterEach.scala:234)
      at org.scalatest.BeforeAndAfterEach.runTest$(BeforeAndAfterEach.scala:227)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.runTest(LoopIntegrationSpec.scala:99)
      at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$runTests$1(AnyFlatSpecLike.scala:1900)
      at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:413)
      at scala.collection.immutable.List.foreach(List.scala:323)
      at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
      at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:390)
      at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:427)
      at scala.collection.immutable.List.foreach(List.scala:323)
      at org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
      at org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:396)
      at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:475)
      at org.scalatest.flatspec.AnyFlatSpecLike.runTests(AnyFlatSpecLike.scala:1900)
      at org.scalatest.flatspec.AnyFlatSpecLike.runTests$(AnyFlatSpecLike.scala:1899)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.runTests(LoopIntegrationSpec.scala:99)
      at org.scalatest.Suite.run(Suite.scala:1114)
      at org.scalatest.Suite.run$(Suite.scala:1096)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.org$scalatest$flatspec$AnyFlatSpecLike$$super$run(LoopIntegrationSpec.scala:99)
      at org.scalatest.flatspec.AnyFlatSpecLike.$anonfun$run$1(AnyFlatSpecLike.scala:1945)
      at org.scalatest.SuperEngine.runImpl(Engine.scala:535)
      at org.scalatest.flatspec.AnyFlatSpecLike.run(AnyFlatSpecLike.scala:1945)
      at org.scalatest.flatspec.AnyFlatSpecLike.run$(AnyFlatSpecLike.scala:1943)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.org$scalatest$BeforeAndAfterAll$$super$run(LoopIntegrationSpec.scala:99)
      at org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:213)
      at org.scalatest.BeforeAndAfterAll.run(BeforeAndAfterAll.scala:210)
      at org.scalatest.BeforeAndAfterAll.run$(BeforeAndAfterAll.scala:208)
      at org.apache.texera.amber.engine.e2e.LoopIntegrationSpec.run(LoopIntegrationSpec.scala:99)
      at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:321)
      at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:517)
      at sbt.TestRunner.runTest$1(TestFramework.scala:153)
      at sbt.TestRunner.run(TestFramework.scala:168)
      at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.$anonfun$apply$1(TestFramework.scala:336)
      at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:296)
      at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
      at sbt.TestFramework$$anon$3$$anonfun$$lessinit$greater$1.apply(TestFramework.scala:336)
      at sbt.TestFunction.apply(TestFramework.scala:348)
      at sbt.Tests$.$anonfun$toTask$1(Tests.scala:436)
      at sbt.std.Transform$$anon$3.$anonfun$apply$2(Transform.scala:47)
      at sbt.std.Transform$$anon$4.work(Transform.scala:69)
      at sbt.Execute.$anonfun$submit$2(Execute.scala:283)
      at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
      at sbt.Execute.work(Execute.scala:292)
      at sbt.Execute.$anonfun$submit$1(Execute.scala:283)
      at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
      at sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
      at java.base/java.lang.Thread.run(Thread.java:840)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Benchmark changes need a look

🟢 2 better · 🔴 8 worse · ⚪ 5 noise (<±5%) · 0 without baseline

Compared against main 40b507d benchmarked on this same runner, so the delta is largely free of cross-runner hardware noise. The "7d avg" column still reflects the gh-pages dashboard. Treat <±5% as noise unless repeated.

Dashboard · Run

config throughput MB/s latency max Δ latest / 7d
🔴 bs=10 sw=10 sl=64 379 0.231 25,843/31,532/31,532 us 🟢 -15.8% / 🔴 +115.6%
🔴 bs=100 sw=10 sl=64 772 0.471 127,685/157,103/157,103 us 🔴 +8.1% / 🔴 +53.5%
🔴 bs=1000 sw=10 sl=64 894 0.545 1,109,481/1,279,423/1,279,423 us 🔴 +10.3% / 🔴 +30.0%
Baseline details

Latest main 40b507d from same runner

config metric PR latest main 7d avg Δ latest Δ 7d
bs=10 sw=10 sl=64 throughput 379 tuples/sec 417 tuples/sec 866.99 tuples/sec -9.1% -56.3%
bs=10 sw=10 sl=64 MB/s 0.231 MB/s 0.255 MB/s 0.529 MB/s -9.4% -56.3%
bs=10 sw=10 sl=64 p50 25,843 us 22,804 us 11,989 us +13.3% +115.6%
bs=10 sw=10 sl=64 p95 31,532 us 37,434 us 14,672 us -15.8% +114.9%
bs=10 sw=10 sl=64 p99 31,532 us 37,434 us 17,906 us -15.8% +76.1%
bs=100 sw=10 sl=64 throughput 772 tuples/sec 814 tuples/sec 1,111 tuples/sec -5.2% -30.5%
bs=100 sw=10 sl=64 MB/s 0.471 MB/s 0.497 MB/s 0.678 MB/s -5.2% -30.6%
bs=100 sw=10 sl=64 p50 127,685 us 118,150 us 95,405 us +8.1% +33.8%
bs=100 sw=10 sl=64 p95 157,103 us 158,395 us 102,332 us -0.8% +53.5%
bs=100 sw=10 sl=64 p99 157,103 us 158,395 us 115,219 us -0.8% +36.4%
bs=1000 sw=10 sl=64 throughput 894 tuples/sec 913 tuples/sec 1,141 tuples/sec -2.1% -21.6%
bs=1000 sw=10 sl=64 MB/s 0.545 MB/s 0.557 MB/s 0.696 MB/s -2.2% -21.7%
bs=1000 sw=10 sl=64 p50 1,109,481 us 1,096,719 us 938,794 us +1.2% +18.2%
bs=1000 sw=10 sl=64 p95 1,279,423 us 1,160,383 us 984,521 us +10.3% +30.0%
bs=1000 sw=10 sl=64 p99 1,279,423 us 1,160,383 us 1,008,827 us +10.3% +26.8%
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,527.76,200,128000,379,0.231,25843.32,31531.69,31531.69
1,100,10,64,20,2589.83,2000,1280000,772,0.471,127685.43,157103.24,157103.24
2,1000,10,64,20,22383.45,20000,12800000,894,0.545,1109481.49,1279422.83,1279422.83

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One regression reproduced on this head with a passing exact-case control.

…klearn Prediction

Schema lookups ignore case, but the generated drop() does not, so a
case-only match passed validation and then raised KeyError at runtime.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Exported Sklearn Prediction script fails when the configured ground truth column is missing from the input

3 participants