Alex Balikov created SPARK-40821:
------------------------------------

             Summary: Fix late record filtering to support chaining of steteful 
operators
                 Key: SPARK-40821
                 URL: https://issues.apache.org/jira/browse/SPARK-40821
             Project: Spark
          Issue Type: Improvement
          Components: Structured Streaming
    Affects Versions: 3.3.0
            Reporter: Alex Balikov


Currently chaining of stateful operators is Spark Structured Streaming is not 
supported for various reasons and is blocked by the unsupported operations 
check (spark.sql.streaming.unsupportedOperationCheck flag). We propose to fix 
this as chaining of stateful operators is a common streaming scenario - e.g.

stream-stream join -> windowed aggregation

window aggregation -> window aggregation

etc

What is broken:
 # every stateful operator performs late record filtering against the global 
watermark. When chaining stateful operators (e.g. window aggregations) the 
output produced by the first stateful operator is effectively late against the 
watermark and thus filtered out by the next operator late record filtering 
(technically the next operator should not do late record filtering but it can 
be changed to assert for correctness detection, etc)
 # when chaining window aggregations, the first window aggregating operator 
produces records with schema \{ window: { start: Timestamp, end: Timestamp }, 
agg: Long } - there is not explicit event time in the schema to be used by the 
next stateful operator (the correct event time should be window.end - 1 )
 # stream-stream time-interval join can produce late records by semantics, e.g. 
if the join condition is:

left.eventTime BETWEEN right.eventTime + INTERVAL 1 HOUR right.eventTime - 
INTERVAL 1 HOUR

          the produced records can be delayed by 1 hr relative to the watermark.

Proposed fixes:

 1. 1 can be fixed by performing late record filtering against the previous 
microbatch watermark instead of the current microbatch watermark.

2. 2 can be fixed by allowing the window and session_window functions to work 
on the window column directly and compute the correct event time transparently 
to the user. Also, introduce window_time SQL function to compute correct event 
time from the window column.

3. 3 can be fixed by adding support for per-operator watermarks instead of a 
single global watermark. In the example of stream-stream time interval join 
followed by a stateful operator, the join operator will 'delay' the downstream 
operator watermarks by a correct value to handle the delayed records. Only 
stream-stream time-interval joins will be delaying the watermark, any other 
operators will not delay downstream watermarks.

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to