[ 
https://issues.apache.org/jira/browse/SPARK-60124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated SPARK-60124:
-----------------------------------
    Labels: pull-request-available sql  (was: sql)

> `LISTAGG(DISTINCT ...)` with `FILTER` fails during planning
> -----------------------------------------------------------
>
>                 Key: SPARK-60124
>                 URL: https://issues.apache.org/jira/browse/SPARK-60124
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 5.0.0
>         Environment: Spark: 5.0.0-SNAPSHOT
> Commit: 38422aefaf599ffb4cfa579d98898d95b1f02081
> Java: OpenJDK 17.0.17
> OS: macOS 15.7.4
>            Reporter: Yibo Dong
>            Priority: Major
>              Labels: pull-request-available, sql
>
> h2. What happened
> A valid query combining {{LISTAGG}}, {{DISTINCT}}, {{WITHIN GROUP (ORDER BY 
> ...)}}, and {{FILTER}} fails with a {{ClassCastException}} during query 
> planning.
> Each feature works in isolation, but their combination causes an internal 
> error in {{RewriteDistinctAggregates}}.
> h2. How to reproduce
> Run the following SQL using {{spark-sql}}:
> {code:sql}
> SELECT listagg(DISTINCT s, '|') WITHIN GROUP (ORDER BY s)
>        FILTER (WHERE keep = 1) AS rendered
> FROM VALUES
>   ('b', 1), ('a', 1), ('a', 1), (NULL, 1), ('c', 0)
> AS t(s, keep);
> {code}
> Save the SQL as {{repro.sql}} and run:
> {code:bash}
> spark-sql --master 'local[2]' 
>   --conf spark.ui.enabled=false 
>   -f repro.sql
> {code}
> h2. Expected result
> The filter retains {{b}}, {{a}}, {{a}}, and {{NULL}}. After removing 
> duplicates, ignoring NULL values, and sorting in ascending order, the result 
> should be:
> {code:text}
> rendered
> --------
> a|b
> {code}
> h2. Actual result
> The query fails during planning with a {{ClassCastException}}:
> {code:text}
> java.lang.ClassCastException:
> class org.apache.spark.sql.catalyst.expressions.AttributeReference
> cannot be cast to class org.apache.spark.sql.catalyst.expressions.SortOrder
>     at 
> org.apache.spark.sql.catalyst.expressions.aggregate.ListAgg.$anonfun$withNewChildrenInternal$1(collect.scala:1051)
>     at 
> org.apache.spark.sql.catalyst.optimizer.RewriteDistinctAggregates.patchAggregateFunctionChildren$1(RewriteDistinctAggregates.scala:264)
>     at 
> org.apache.spark.sql.catalyst.optimizer.RewriteDistinctAggregates$.rewrite(RewriteDistinctAggregates.scala:308)
> {code}
> h2. Additional information
> Control queries confirmed that ordered {{LISTAGG}}, {{LISTAGG(DISTINCT 
> ...)}}, and filtered ordered {{LISTAGG}} execute correctly. Only the 
> combination of {{DISTINCT}}, {{FILTER}}, and {{WITHIN GROUP}} fails.
> Excluding {{RewriteDistinctAggregates}} did not prevent the failure. The 
> original query fails before physical execution. A semantically equivalent 
> query that filters and deduplicates the input before applying {{LISTAGG}} 
> returns the expected result, {{a|b}}.



--
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