Those annotations actually don't work because the timestamp is SQL has
optional nano-second precision.

However, there is a PR to add support using parquets INT96 type:
https://github.com/apache/spark/pull/3820

On Fri, Jan 23, 2015 at 12:08 PM, Manoj Samel <manojsamelt...@gmail.com>
wrote:

> Looking further at the trace and ParquetTypes.scala, it seems there is no
> support for Timestamp and Date in fromPrimitiveDataType(ctype: DataType):
> Option[ParquetTypeInfo]. Since Parquet supports these type with some
> decoration over Int (
> https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md),
> any reason why Date / Timestamp are not supported right now ?
>
> Thanks,
>
> Manoj
>
>
> On Fri, Jan 23, 2015 at 11:40 AM, Manoj Samel <manojsamelt...@gmail.com>
> wrote:
>
>> Using Spark 1.2
>>
>> Read a CSV file, apply schema to convert to SchemaRDD and then
>> schemaRdd.saveAsParquetFile
>>
>> If the schema includes Timestamptype, it gives following trace when doing
>> the save
>>
>> Exception in thread "main" java.lang.RuntimeException: Unsupported
>> datatype TimestampType
>>
>> at scala.sys.package$.error(package.scala:27)
>>
>> at
>> org.apache.spark.sql.parquet.ParquetTypesConverter$$anonfun$fromDataType$2.apply(
>> ParquetTypes.scala:343)
>>
>> at
>> org.apache.spark.sql.parquet.ParquetTypesConverter$$anonfun$fromDataType$2.apply(
>> ParquetTypes.scala:292)
>>
>> at scala.Option.getOrElse(Option.scala:120)
>>
>> at org.apache.spark.sql.parquet.ParquetTypesConverter$.fromDataType(
>> ParquetTypes.scala:291)
>>
>> at org.apache.spark.sql.parquet.ParquetTypesConverter$$anonfun$4.apply(
>> ParquetTypes.scala:363)
>>
>> at org.apache.spark.sql.parquet.ParquetTypesConverter$$anonfun$4.apply(
>> ParquetTypes.scala:362)
>>
>> at scala.collection.TraversableLike$$anonfun$map$1.apply(
>> TraversableLike.scala:244)
>>
>> at scala.collection.TraversableLike$$anonfun$map$1.apply(
>> TraversableLike.scala:244)
>>
>> at scala.collection.mutable.ResizableArray$class.foreach(
>> ResizableArray.scala:59)
>>
>> at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
>>
>> at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
>>
>> at scala.collection.AbstractTraversable.map(Traversable.scala:105)
>>
>> at
>> org.apache.spark.sql.parquet.ParquetTypesConverter$.convertFromAttributes(
>> ParquetTypes.scala:361)
>>
>> at org.apache.spark.sql.parquet.ParquetTypesConverter$.writeMetaData(
>> ParquetTypes.scala:407)
>>
>> at org.apache.spark.sql.parquet.ParquetRelation$.createEmpty(
>> ParquetRelation.scala:166)
>>
>> at org.apache.spark.sql.parquet.ParquetRelation$.create(
>> ParquetRelation.scala:145)
>>
>> at
>> org.apache.spark.sql.execution.SparkStrategies$ParquetOperations$.apply(
>> SparkStrategies.scala:204)
>>
>> at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(
>> QueryPlanner.scala:58)
>>
>> at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(
>> QueryPlanner.scala:58)
>>
>> at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
>>
>> at org.apache.spark.sql.catalyst.planning.QueryPlanner.apply(
>> QueryPlanner.scala:59)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.sparkPlan$lzycompute(
>> SQLContext.scala:418)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.sparkPlan(
>> SQLContext.scala:416)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.executedPlan$lzycompute(
>> SQLContext.scala:422)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.executedPlan(
>> SQLContext.scala:422)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.toRdd$lzycompute(
>> SQLContext.scala:425)
>>
>> at org.apache.spark.sql.SQLContext$QueryExecution.toRdd(
>> SQLContext.scala:425)
>>
>> at org.apache.spark.sql.SchemaRDDLike$class.saveAsParquetFile(
>> SchemaRDDLike.scala:76)
>>
>> at org.apache.spark.sql.SchemaRDD.saveAsParquetFile(SchemaRDD.scala:108)
>>
>> at bdrt.MyTest$.createParquetWithDate(MyTest.scala:88)
>>
>> at bdrt.MyTest$delayedInit$body.apply(MyTest.scala:54)
>>
>> at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
>>
>> at scala.runtime.AbstractFunction0.apply$mcV$sp(
>> AbstractFunction0.scala:12)
>>
>> at scala.App$$anonfun$main$1.apply(App.scala:71)
>>
>> at scala.App$$anonfun$main$1.apply(App.scala:71)
>>
>> at scala.collection.immutable.List.foreach(List.scala:318)
>>
>> at scala.collection.generic.TraversableForwarder$class.foreach(
>> TraversableForwarder.scala:32)
>>
>> at scala.App$class.main(App.scala:71)
>>
>> at bdrt.MyTest$.main(MyTest.scala:10)
>>
>>
>>
>

Reply via email to