diff options
author | Weiqing Yang <yangweiqing001@gmail.com> | 2016-12-14 09:48:38 +0800 |
---|---|---|
committer | Wenchen Fan <wenchen@databricks.com> | 2016-12-14 09:48:38 +0800 |
commit | ae5b2d3e46cc4c460f539c4db1688309d1cdc66a (patch) | |
tree | ede19fbb4d34cf4941461d1b9169df13c0c6ba61 /sql/core/src/main | |
parent | 594b14f1ebd0b3db9f630e504be92228f11b4d9f (diff) | |
download | spark-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.scala | 15 |
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() |