Hello,
I have following issue.
I have created parquet file through cascading parquet and want to load into
the hive table.
My datafile contain data of type timestamp.
Cascading parquet does not support timestamp data type , so while creating
parquet file I have given as binary type. After generating parquet file , this
Parquet file is loaded successfully in the hive .
While creating hive table I have given the column type as timestamp.
Code :
package com.parquet.TimestampTest;
import cascading.flow.FlowDef;
import cascading.flow.hadoop.HadoopFlowConnector;
import cascading.pipe.Pipe;
import cascading.scheme.Scheme;
import cascading.scheme.hadoop.TextDelimited;
import cascading.tap.SinkMode;
import cascading.tap.Tap;
import cascading.tap.hadoop.Hfs;
import cascading.tuple.Fields;
import parquet.cascading.ParquetTupleScheme;
public class GenrateTimeStampParquetFile {
static String inputPath = "target/input/timestampInputFile1";
static String outputPath =
"target/parquetOutput/TimestampOutput";
public static void main(String[] args) {
write();
}
private static void write() {
// TODO Auto-generated method stub
Fields field = new
Fields("timestampField").applyTypes(String.class);
Scheme sourceSch = new TextDelimited(field,
false, "\n");
Fields outputField = new
Fields("timestampField");
Scheme sinkSch = new ParquetTupleScheme(field,
outputField,
"message
TimeStampTest{optional binary timestampField ;}");
Tap source = new Hfs(sourceSch, inputPath);
Tap sink = new Hfs(sinkSch, outputPath,
SinkMode.REPLACE);
Pipe pipe = new Pipe("Hive timestamp");
FlowDef fd = FlowDef.flowDef().addSource(pipe,
source).addTailSink(pipe, sink);
new
HadoopFlowConnector().connect(fd).complete();
}
}
Input file:
timestampInputFile1
timestampField
1988-05-25 15:15:15.254
1987-05-06 14:14:25.362
After running the code following files are generated.
Output :
1. part-00000-m-00000.parquet
2. _SUCCESS
3. _metadata
4. _common_metadata
I have created the table in hive to load the part-00000-m-00000.parquet file.
I have written following query in the hive.
Query :
hive> create table test3(timestampField timestamp) stored as parquet;
hive> load data local inpath
'/home/hduser/parquet_testing/part-00000-m-00000.parquet' into table test3;
hive> select * from test3;
After running above command I got following as output.
Output :
OK
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.
Failed with exception
java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException:
java.lang.ClassCastException: org.apache.hadoop.io.BytesWritable cannot be cast
to org.apache.hadoop.hive.serde2.io.TimestampWritable
But I have got above exception.
So please help me to solve this problem.
Currently I am using
Hive 1.1.0-cdh5.4.2.
Cascading 2.5.1
parquet-format-2.2.0
Thanks
Santlal J. Gupta
**************************************Disclaimer******************************************
This e-mail message and any attachments may contain confidential information
and is for the sole use of the intended recipient(s) only. Any views or
opinions presented or implied are solely those of the author and do not
necessarily represent the views of BitWise. If you are not the intended
recipient(s), you are hereby notified that disclosure, printing, copying,
forwarding, distribution, or the taking of any action whatsoever in reliance on
the contents of this electronic information is strictly prohibited. If you have
received this e-mail message in error, please immediately notify the sender and
delete the electronic message and any attachments.BitWise does not accept
liability for any virus introduced by this e-mail or any attachments.
********************************************************************************************