aboutsummaryrefslogtreecommitdiff
path: root/repl/scala-2.10/src/main/scala/org/apache
diff options
context:
space:
mode:
authorMichael Armbrust <michael@databricks.com>2015-11-20 15:17:17 -0800
committerMichael Armbrust <michael@databricks.com>2015-11-20 15:17:17 -0800
commit4b84c72dfbb9ddb415fee35f69305b5d7b280891 (patch)
treefc539c382da5480312a8be25afe8b9a922811ded /repl/scala-2.10/src/main/scala/org/apache
parenta6239d587c638691f52eca3eee905c53fbf35a12 (diff)
downloadspark-4b84c72dfbb9ddb415fee35f69305b5d7b280891.tar.gz
spark-4b84c72dfbb9ddb415fee35f69305b5d7b280891.tar.bz2
spark-4b84c72dfbb9ddb415fee35f69305b5d7b280891.zip
[SPARK-11636][SQL] Support classes defined in the REPL with Encoders
#theScaryParts (i.e. changes to the repl, executor classloaders and codegen)... Author: Michael Armbrust <michael@databricks.com> Author: Yin Huai <yhuai@databricks.com> Closes #9825 from marmbrus/dataset-replClasses2.
Diffstat (limited to 'repl/scala-2.10/src/main/scala/org/apache')
-rw-r--r--repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkIMain.scala14
1 files changed, 10 insertions, 4 deletions
diff --git a/repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkIMain.scala b/repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkIMain.scala
index 4ee605fd7f..829b12269f 100644
--- a/repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkIMain.scala
+++ b/repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkIMain.scala
@@ -1221,10 +1221,16 @@ import org.apache.spark.annotation.DeveloperApi
)
}
- val preamble = """
- |class %s extends Serializable {
- | %s%s%s
- """.stripMargin.format(lineRep.readName, envLines.map(" " + _ + ";\n").mkString, importsPreamble, indentCode(toCompute))
+ val preamble = s"""
+ |class ${lineRep.readName} extends Serializable {
+ | ${envLines.map(" " + _ + ";\n").mkString}
+ | $importsPreamble
+ |
+ | // If we need to construct any objects defined in the REPL on an executor we will need
+ | // to pass the outer scope to the appropriate encoder.
+ | org.apache.spark.sql.catalyst.encoders.OuterScopes.addOuterScope(this)
+ | ${indentCode(toCompute)}
+ """.stripMargin
val postamble = importsTrailer + "\n}" + "\n" +
"object " + lineRep.readName + " {\n" +
" val INSTANCE = new " + lineRep.readName + "();\n" +