aboutsummaryrefslogtreecommitdiff
path: root/sql/core/src/main
diff options
context:
space:
mode:
authorWeiqing Yang <yangweiqing001@gmail.com>2016-12-14 09:48:38 +0800
committerWenchen Fan <wenchen@databricks.com>2016-12-14 09:48:38 +0800
commitae5b2d3e46cc4c460f539c4db1688309d1cdc66a (patch)
treeede19fbb4d34cf4941461d1b9169df13c0c6ba61 /sql/core/src/main
parent594b14f1ebd0b3db9f630e504be92228f11b4d9f (diff)
downloadspark-ae5b2d3e46cc4c460f539c4db1688309d1cdc66a.tar.gz
spark-ae5b2d3e46cc4c460f539c4db1688309d1cdc66a.tar.bz2
spark-ae5b2d3e46cc4c460f539c4db1688309d1cdc66a.zip
[SPARK-18746][SQL] Add implicit encoder for BigDecimal, timestamp and date
## What changes were proposed in this pull request? Add implicit encoders for BigDecimal, timestamp and date. ## How was this patch tested? Add an unit test. Pass build, unit tests, and some tests below . Before: ``` scala> spark.createDataset(Seq(new java.math.BigDecimal(10))) <console>:24: error: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. spark.createDataset(Seq(new java.math.BigDecimal(10))) ^ scala> ``` After: ``` scala> spark.createDataset(Seq(new java.math.BigDecimal(10))) res0: org.apache.spark.sql.Dataset[java.math.BigDecimal] = [value: decimal(38,18)] ``` Author: Weiqing Yang <yangweiqing001@gmail.com> Closes #16176 from weiqingy/SPARK-18746.
Diffstat (limited to 'sql/core/src/main')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala15
1 files changed, 14 insertions, 1 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala b/sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala
index 73d16d8a10..872a78b578 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala
@@ -74,6 +74,19 @@ abstract class SQLImplicits {
/** @since 1.6.0 */
implicit def newStringEncoder: Encoder[String] = Encoders.STRING
+ /** @since 2.2.0 */
+ implicit def newJavaDecimalEncoder: Encoder[java.math.BigDecimal] = Encoders.DECIMAL
+
+ /** @since 2.2.0 */
+ implicit def newScalaDecimalEncoder: Encoder[scala.math.BigDecimal] = ExpressionEncoder()
+
+ /** @since 2.2.0 */
+ implicit def newDateEncoder: Encoder[java.sql.Date] = Encoders.DATE
+
+ /** @since 2.2.0 */
+ implicit def newTimeStampEncoder: Encoder[java.sql.Timestamp] = Encoders.TIMESTAMP
+
+
// Boxed primitives
/** @since 2.0.0 */
@@ -141,7 +154,7 @@ abstract class SQLImplicits {
implicit def newFloatArrayEncoder: Encoder[Array[Float]] = ExpressionEncoder()
/** @since 1.6.1 */
- implicit def newByteArrayEncoder: Encoder[Array[Byte]] = ExpressionEncoder()
+ implicit def newByteArrayEncoder: Encoder[Array[Byte]] = Encoders.BINARY
/** @since 1.6.1 */
implicit def newShortArrayEncoder: Encoder[Array[Short]] = ExpressionEncoder()