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

Cheng Lian updated SPARK-13540:
-------------------------------
    Description: 
Add the following test case to {{DatasetSuite}} to reproduce this issue:
{code}
object OuterObject {
  case class InnerClass(a: String)
}

test("foo") {
  OuterScopes.addOuterScope(OuterObject)
  Seq(OuterObject.InnerClass("foo")).toDS()
}
{code}
Exception thrown:
{noformat}
org.apache.spark.sql.AnalysisException: Unable to generate an encoder for inner 
class `org.apache.spark.sql.OuterObject$InnerClass` without access to the scope 
that this class was defined in.
{noformat}
The reason is that an inner class within a Scala object is translated into a 
static nested class, and no outer scope is needed. But the analyzer still 
thinks there should be an outer scope.

  was:
Add the following test case to {{DatasetSuite}} to reproduce this issue:
{code}
object OuterObject {
  case class InnerClass(a: String)
}

test("foo") {
  OuterScopes.addOuterScope(OuterObject)
  Seq(OuterObject.InnerClass("foo")).toDS()
}
{code}
Exception thrown:
{noformat}
org.apache.spark.sql.AnalysisException: Unable to generate an encoder for inner 
class `org.apache.spark.sql.OuterObject$InnerClass` without access to the scope 
that this class was defined in.
{noformat}
The reason is that the class name added to {{OuterScope}} is the the one with 
{{$}} suffix (class name of the object), while the Java declaring class of 
{{InnerClass}} is the one without {{$}} suffix.


> Scala object can't be added to OuterScopes
> ------------------------------------------
>
>                 Key: SPARK-13540
>                 URL: https://issues.apache.org/jira/browse/SPARK-13540
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.0.0
>            Reporter: Cheng Lian
>            Assignee: Cheng Lian
>
> Add the following test case to {{DatasetSuite}} to reproduce this issue:
> {code}
> object OuterObject {
>   case class InnerClass(a: String)
> }
> test("foo") {
>   OuterScopes.addOuterScope(OuterObject)
>   Seq(OuterObject.InnerClass("foo")).toDS()
> }
> {code}
> Exception thrown:
> {noformat}
> org.apache.spark.sql.AnalysisException: Unable to generate an encoder for 
> inner class `org.apache.spark.sql.OuterObject$InnerClass` without access to 
> the scope that this class was defined in.
> {noformat}
> The reason is that an inner class within a Scala object is translated into a 
> static nested class, and no outer scope is needed. But the analyzer still 
> thinks there should be an outer scope.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to