aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorDaoyuan Wang <daoyuan.wang@intel.com>2014-10-28 13:43:25 -0700
committerMichael Armbrust <michael@databricks.com>2014-10-28 13:43:25 -0700
commit47a40f60d62ea69b659959994918d4c640f39d5b (patch)
tree67582dfaec3140d5e247a9170278e729b6af41c4 /sql/catalyst
parent5807cb40ae178f0395c71b967f02aee853ef8bc9 (diff)
downloadspark-47a40f60d62ea69b659959994918d4c640f39d5b.tar.gz
spark-47a40f60d62ea69b659959994918d4c640f39d5b.tar.bz2
spark-47a40f60d62ea69b659959994918d4c640f39d5b.zip
[SPARK-3988][SQL] add public API for date type
Add json and python api for date type. By using Pickle, `java.sql.Date` was serialized as calendar, and recognized in python as `datetime.datetime`. Author: Daoyuan Wang <daoyuan.wang@intel.com> Closes #2901 from adrian-wang/spark3988 and squashes the following commits: c51a24d [Daoyuan Wang] convert datetime to date 5670626 [Daoyuan Wang] minor line combine f760d8e [Daoyuan Wang] fix indent 444f100 [Daoyuan Wang] fix a typo 1d74448 [Daoyuan Wang] fix scala style 8d7dd22 [Daoyuan Wang] add json and python api for date type
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala1
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/types/dataTypes.scala4
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/ScalaReflectionSuite.scala9
3 files changed, 11 insertions, 3 deletions
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 7d930fccd5..d76c743d3f 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
@@ -112,6 +112,7 @@ object ScalaReflection {
case obj: FloatType.JvmType => FloatType
case obj: DoubleType.JvmType => DoubleType
case obj: DecimalType.JvmType => DecimalType
+ case obj: DateType.JvmType => DateType
case obj: TimestampType.JvmType => TimestampType
case null => NullType
// For other cases, there is no obvious mapping from the type of the given object to a
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/types/dataTypes.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/types/dataTypes.scala
index 0cf139ebde..b9cf37d53f 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/types/dataTypes.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/types/dataTypes.scala
@@ -91,6 +91,7 @@ object DataType {
| "BinaryType" ^^^ BinaryType
| "BooleanType" ^^^ BooleanType
| "DecimalType" ^^^ DecimalType
+ | "DateType" ^^^ DateType
| "TimestampType" ^^^ TimestampType
)
@@ -198,7 +199,8 @@ trait PrimitiveType extends DataType {
}
object PrimitiveType {
- private[sql] val all = Seq(DecimalType, TimestampType, BinaryType) ++ NativeType.all
+ private[sql] val all = Seq(DecimalType, DateType, TimestampType, BinaryType) ++
+ NativeType.all
private[sql] val nameToType = all.map(t => t.typeName -> t).toMap
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/ScalaReflectionSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/ScalaReflectionSuite.scala
index 488e373854..430f0664b7 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/ScalaReflectionSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/ScalaReflectionSuite.scala
@@ -18,7 +18,7 @@
package org.apache.spark.sql.catalyst
import java.math.BigInteger
-import java.sql.Timestamp
+import java.sql.{Date, Timestamp}
import org.scalatest.FunSuite
@@ -43,6 +43,7 @@ case class NullableData(
booleanField: java.lang.Boolean,
stringField: String,
decimalField: BigDecimal,
+ dateField: Date,
timestampField: Timestamp,
binaryField: Array[Byte])
@@ -96,6 +97,7 @@ class ScalaReflectionSuite extends FunSuite {
StructField("booleanField", BooleanType, nullable = true),
StructField("stringField", StringType, nullable = true),
StructField("decimalField", DecimalType, nullable = true),
+ StructField("dateField", DateType, nullable = true),
StructField("timestampField", TimestampType, nullable = true),
StructField("binaryField", BinaryType, nullable = true))),
nullable = true))
@@ -199,8 +201,11 @@ class ScalaReflectionSuite extends FunSuite {
// DecimalType
assert(DecimalType === typeOfObject(BigDecimal("1.7976931348623157E318")))
+ // DateType
+ assert(DateType === typeOfObject(Date.valueOf("2014-07-25")))
+
// TimestampType
- assert(TimestampType === typeOfObject(java.sql.Timestamp.valueOf("2014-07-25 10:26:00")))
+ assert(TimestampType === typeOfObject(Timestamp.valueOf("2014-07-25 10:26:00")))
// NullType
assert(NullType === typeOfObject(null))