Repository: spark
Updated Branches:
  refs/heads/master fc8a2b6ee -> b23693390


[SPARK-17424] Fix unsound substitution bug in ScalaReflection.

## What changes were proposed in this pull request?

This method gets a type's primary constructor and fills in type parameters with 
concrete types. For example, `MapPartitions[T, U] -> MapPartitions[Int, 
String]`. This Substitution fails when the actual type args are empty because 
they are still unknown. Instead, when there are no resolved types to subsitute, 
this returns the original args with unresolved type parameters.
## How was this patch tested?

This doesn't affect substitutions where the type args are determined. This 
fixes our case where the actual type args are empty and our job runs 
successfully.

Author: Ryan Blue <[email protected]>

Closes #15062 from rdblue/SPARK-17424-fix-unsound-reflect-substitution.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/b2369339
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/b2369339
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/b2369339

Branch: refs/heads/master
Commit: b23693390781a99ff9248ea07a22e68884ffc747
Parents: fc8a2b6
Author: Ryan Blue <[email protected]>
Authored: Fri May 12 20:38:36 2017 +0800
Committer: Wenchen Fan <[email protected]>
Committed: Fri May 12 20:38:36 2017 +0800

----------------------------------------------------------------------
 .../org/apache/spark/sql/catalyst/ScalaReflection.scala | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/b2369339/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala
index 82710a2..6d1d019 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala
@@ -836,8 +836,16 @@ trait ScalaReflection {
   def getConstructorParameters(tpe: Type): Seq[(String, Type)] = {
     val formalTypeArgs = tpe.typeSymbol.asClass.typeParams
     val TypeRef(_, _, actualTypeArgs) = tpe
-    constructParams(tpe).map { p =>
-      p.name.toString -> p.typeSignature.substituteTypes(formalTypeArgs, 
actualTypeArgs)
+    val params = constructParams(tpe)
+    // if there are type variables to fill in, do the substitution 
(SomeClass[T] -> SomeClass[Int])
+    if (actualTypeArgs.nonEmpty) {
+      params.map { p =>
+        p.name.toString -> p.typeSignature.substituteTypes(formalTypeArgs, 
actualTypeArgs)
+      }
+    } else {
+      params.map { p =>
+        p.name.toString -> p.typeSignature
+      }
     }
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to