aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorLiang-Chi Hsieh <simonh@tw.ibm.com>2016-05-11 09:31:22 -0700
committerXiangrui Meng <meng@databricks.com>2016-05-11 09:31:22 -0700
commita5f9fdbba3bbefb56ca9ab33271301a2ff0834b5 (patch)
treeaa16e3718d2af592411c18fd67d28a477a3d0e38 /sql/catalyst
parent427c20dd6d84cb9de1aac322183bc6e7b72ca25d (diff)
downloadspark-a5f9fdbba3bbefb56ca9ab33271301a2ff0834b5.tar.gz
spark-a5f9fdbba3bbefb56ca9ab33271301a2ff0834b5.tar.bz2
spark-a5f9fdbba3bbefb56ca9ab33271301a2ff0834b5.zip
[SPARK-15268][SQL] Make JavaTypeInference work with UDTRegistration
## What changes were proposed in this pull request? We have a private `UDTRegistration` API to register user defined type. Currently `JavaTypeInference` can't work with it. So `SparkSession.createDataFrame` from a bean class will not correctly infer the schema of the bean class. ## How was this patch tested? `VectorUDTSuite`. Author: Liang-Chi Hsieh <simonh@tw.ibm.com> Closes #13046 from viirya/fix-udt-registry-javatypeinference.
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala5
1 files changed, 5 insertions, 0 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
index 6f9fbbbead..92caf8f406 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
@@ -63,6 +63,11 @@ object JavaTypeInference {
case c: Class[_] if c.isAnnotationPresent(classOf[SQLUserDefinedType]) =>
(c.getAnnotation(classOf[SQLUserDefinedType]).udt().newInstance(), true)
+ case c: Class[_] if UDTRegistration.exists(c.getName) =>
+ val udt = UDTRegistration.getUDTFor(c.getName).get.newInstance()
+ .asInstanceOf[UserDefinedType[_ >: Null]]
+ (udt, true)
+
case c: Class[_] if c == classOf[java.lang.String] => (StringType, true)
case c: Class[_] if c == classOf[Array[Byte]] => (BinaryType, true)