Repository navigation
Description
What is the problem the feature request solves?
Note: This issue was generated with AI assistance. The specification details have been extracted from Spark documentation and may need verification.
Comet does not currently support the Spark seconds_of_time function, causing queries using this function to fall back to Spark's JVM execution instead of running natively on DataFusion.
The SecondsOfTime expression extracts the seconds component from a time-related value. This is a unary expression that operates on a single child expression and returns the seconds portion as an integer value.
Supporting this expression would allow more Spark workloads to benefit from Comet's native acceleration.
Describe the potential solution
Spark Specification
Syntax:
-- SQL syntax (implementation-dependent)
SECONDS(time_expression)// DataFrame API usage
import org.apache.spark.sql.catalyst.expressions.SecondsOfTime
SecondsOfTime(child_expression)Arguments:
| Argument | Type | Description |
|---|---|---|
| child | Expression | The input expression containing time data from which to extract seconds |
Return Type: Integer type representing the seconds component (typically 0-59).
Supported Data Types:
- Timestamp types
- Time-related string formats
- Date/time structures that contain seconds information
Edge Cases:
- Null handling: Returns null if the child expression evaluates to null
- Invalid time formats: Behavior depends on the underlying time parsing implementation
- Leap seconds: Handles standard 0-59 seconds range, special leap second handling may vary
- Timezone considerations: Seconds extraction is typically timezone-independent
Examples:
-- Example SQL usage (hypothetical)
SELECT SECONDS(current_timestamp()) as current_seconds;
SELECT SECONDS('2023-12-25 14:30:45') as extracted_seconds; -- Returns 45// Example DataFrame API usage
import org.apache.spark.sql.functions._
import org.apache.spark.sql.catalyst.expressions.SecondsOfTime
// Using in a DataFrame transformation
df.select(SecondsOfTime(col("timestamp_column")))Implementation Approach
See the Comet guide on adding new expressions for detailed instructions.
- Scala Serde: Add expression handler in
spark/src/main/scala/org/apache/comet/serde/ - Register: Add to appropriate map in
QueryPlanSerde.scala - Protobuf: Add message type in
native/proto/src/proto/expr.protoif needed - Rust: Implement in
native/spark-expr/src/(check if DataFusion has built-in support first)
Additional context
Difficulty: Medium
Spark Expression Class: org.apache.spark.sql.catalyst.expressions.SecondsOfTime
Related:
MinutesOfTime- Extracts minutes componentHoursOfTime- Extracts hours componentsecond()- Built-in SQL function for seconds extraction- Time extraction expressions in Spark Catalyst
This issue was auto-generated from Spark reference documentation.
Activity
0lai0 commentedon Feb 9, 2026
take
andygrove commentedon Jul 29, 2026
SecondsOfTimeis aRuntimeReplaceableexpression. TheReplaceExpressionsrule (Finish Analysis batch) substitutes it with itsreplacementbefore physical planning, so the class never appears in a physical plan and Comet's expression serde never sees it. Registering aCometExpressionSerdefor it would be dead code.Its replacement is a
StaticInvokeintoDateTimeUtils.getSecondsOfTime, so this function is never gated on a serde forSecondsOfTime. Native support forseconds_of_timewould have to come from supporting that replacement, which is a different piece of work than this issue describes.Closing as not actionable as specified. If the fallback matters in practice, a fresh issue should track the replacement path.