You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Ben Hollis (Jira)" <ji...@apache.org> on 2026/10/07 22:45:00 UTC

[jira] [Created] (SPARK-60066) Nested UpdateFields expressions duplicate source expressions

Ben Hollis created SPARK-60066:
----------------------------------

             Summary: Nested UpdateFields expressions duplicate source expressions
                 Key: SPARK-60066
                 URL: https://issues.apache.org/jira/browse/SPARK-60066
             Project: Spark
          Issue Type: Improvement
          Components: SQL
    Affects Versions: 4.4.0
            Reporter: Ben Hollis


Spark represents `Column.withField` as the Catalyst expression `UpdateFields`. Before execution, Spark replaces that expression with a new struct containing the updated value and a read for every unchanged field. Each unchanged-field read contains the complete expression that produces the input struct.
 
When several updates are nested, the input to one replacement contains the replacement generated for the previous update. Spark repeats that entire earlier expression in every unchanged-field read. The logical expression can therefore grow much faster than the number of requested updates, increasing optimizer, expression-binding, and code-generation costs.
 
### Example
{code:java}
val updated = col("s")
.withField("nested.a", lit(1))
.withField("nested.b", lit(2))
.withField("nested.c", lit(3))


df.select(updated) {code}
 
Suppose `s` has the schema `struct<nested:struct<value:int>,d:int,e:int,f:int>`. The query changes three fields under `nested`; it does not change `d`, `e`, or `f`. Spark nevertheless generates reads for those unchanged fields at each replacement layer. Those reads repeat the expression generated for the earlier layer, so the Catalyst tree grows by far more than the three requested changes.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org