You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Anton Okolnychyi (JIRA)" <ji...@apache.org> on 2017/08/12 09:23:01 UTC

[jira] [Commented] (SPARK-21691) Accessing canonicalized plan for query with limit throws exception

    [ https://issues.apache.org/jira/browse/SPARK-21691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16124532#comment-16124532 ] 

Anton Okolnychyi commented on SPARK-21691:
------------------------------------------

The issue is related to `Project \[\*\]` but not to `Limit`. You will always have this exception if you have a non-top level `Project \[\*\]` in your logical plan. For instance, the following query will also produce the same exception:

{noformat}
spark.sql("select * from (select * from (values 0, 1)) as v").queryExecution.logical.canonicalized
{noformat}

In the failing example from the ticket description, the non-canonicalized logical plan looks like:

{noformat}
'GlobalLimit 1
+- 'LocalLimit 1
   +- 'Project [*]
      +- 'SubqueryAlias __auto_generated_subquery_name
         +- 'UnresolvedInlineTable [col1], [List(0), List(1)]
{noformat}

Once Spark tries to canonicalize it and processes `LocalLimit 1`, it will get all attributes by calling `children.flatMap(_.output)`, which triggers the problem. `Project#output` will try to convert its project list to attributes, which will fail for `UnresolvedStar` with the aforementioned exception.

I see that `UnresolvedRelation` and `UnresolvedInlineTable` return Nil as output. Therefore, one option to fix this problem is to return `Nil` as output from `Project` if it is unresolved.

{noformat}
override def output: Seq[Attribute] = if (resolved) projectList.map(_.toAttribute) else Nil
{noformat}

I can fix it once we agree on a solution.


> Accessing canonicalized plan for query with limit throws exception
> ------------------------------------------------------------------
>
>                 Key: SPARK-21691
>                 URL: https://issues.apache.org/jira/browse/SPARK-21691
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.2.0
>            Reporter: Bjoern Toldbod
>
> Accessing the logical, canonicalized plan fails for queries with limits.
> The following demonstrates the issue:
> {code:java}
> val session = SparkSession.builder.master("local").getOrCreate()
> // This works
> session.sql("select * from (values 0, 1)").queryExecution.logical.canonicalized
> // This fails
> session.sql("select * from (values 0, 1) limit 1").queryExecution.logical.canonicalized
> {code}
> The message in the thrown exception is somewhat confusing (or at least not directly related to the limit):
> "Invalid call to toAttribute on unresolved object, tree: *"



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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