Skip to content

Commit faef887

Browse files
committed
parquet support for primitive date
1 parent 97e9080 commit faef887

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

sql/core/src/main/scala/org/apache/spark/sql/parquet/ParquetConverter.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
package org.apache.spark.sql.parquet
1919

20-
import java.sql.{Date, Timestamp}
20+
import java.sql.Timestamp
2121
import java.util.{TimeZone, Calendar}
2222

2323
import scala.collection.mutable.{Buffer, ArrayBuffer, HashMap}
@@ -127,6 +127,12 @@ private[sql] object CatalystConverter {
127127
parent.updateByte(fieldIndex, value.asInstanceOf[ByteType.JvmType])
128128
}
129129
}
130+
case DateType => {
131+
new CatalystPrimitiveConverter(parent, fieldIndex) {
132+
override def addInt(value: Int): Unit =
133+
parent.updateDate(fieldIndex, value.asInstanceOf[DateType.JvmType])
134+
}
135+
}
130136
case d: DecimalType => {
131137
new CatalystPrimitiveConverter(parent, fieldIndex) {
132138
override def addBinary(value: Binary): Unit =
@@ -193,7 +199,7 @@ private[parquet] abstract class CatalystConverter extends GroupConverter {
193199
updateField(fieldIndex, value)
194200

195201
protected[parquet] def updateDate(fieldIndex: Int, value: Int): Unit =
196-
updateField(fieldIndex, new Date(value))
202+
updateField(fieldIndex, value)
197203

198204
protected[parquet] def updateLong(fieldIndex: Int, value: Long): Unit =
199205
updateField(fieldIndex, value)
@@ -392,7 +398,7 @@ private[parquet] class CatalystPrimitiveRowConverter(
392398
current.setInt(fieldIndex, value)
393399

394400
override protected[parquet] def updateDate(fieldIndex: Int, value: Int): Unit =
395-
current.update(fieldIndex, new Date(value))
401+
current.update(fieldIndex, value)
396402

397403
override protected[parquet] def updateLong(fieldIndex: Int, value: Long): Unit =
398404
current.setLong(fieldIndex, value)

sql/core/src/main/scala/org/apache/spark/sql/parquet/ParquetTableSupport.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private[parquet] class RowWriteSupport extends WriteSupport[Row] with Logging {
212212
case DoubleType => writer.addDouble(value.asInstanceOf[Double])
213213
case FloatType => writer.addFloat(value.asInstanceOf[Float])
214214
case BooleanType => writer.addBoolean(value.asInstanceOf[Boolean])
215-
case DateType => writer.addInteger(value.asInstanceOf[java.sql.Date].getTime.toInt)
215+
case DateType => writer.addInteger(value.asInstanceOf[Int])
216216
case d: DecimalType =>
217217
if (d.precisionInfo == None || d.precisionInfo.get.precision > 18) {
218218
sys.error(s"Unsupported datatype $d, cannot write to consumer")
@@ -359,6 +359,7 @@ private[parquet] class MutableRowWriteSupport extends RowWriteSupport {
359359
case DoubleType => writer.addDouble(record.getDouble(index))
360360
case FloatType => writer.addFloat(record.getFloat(index))
361361
case BooleanType => writer.addBoolean(record.getBoolean(index))
362+
case DateType => writer.addInteger(record.getInt(index))
362363
case TimestampType => writeTimestamp(record(index).asInstanceOf[java.sql.Timestamp])
363364
case d: DecimalType =>
364365
if (d.precisionInfo == None || d.precisionInfo.get.precision > 18) {

0 commit comments

Comments
 (0)