From bb04d1f8a8ed2ae521f95694e9df4e75cbd7c512 Mon Sep 17 00:00:00 2001 From: Cheng Hao Date: Fri, 19 Dec 2014 03:23:56 -0800 Subject: [PATCH] hot fix for ByteWritables.copyBytes --- .../scala/org/apache/spark/sql/hive/HiveInspectors.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala index 06189341f827c..e1147478130dd 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala @@ -297,7 +297,13 @@ private[hive] trait HiveInspectors { case x: ByteObjectInspector if x.preferWritable() => x.get(data) case x: HiveDecimalObjectInspector => HiveShim.toCatalystDecimal(x, data) case x: BinaryObjectInspector if x.preferWritable() => - x.getPrimitiveWritableObject(data).copyBytes() + // BytesWritable.copyBytes() only available since Hadoop2 + // In order to keep backward-compatible, we have to copy the + // bytes with old apis + val bw = x.getPrimitiveWritableObject(data) + val result = new Array[Byte](bw.getLength()) + System.arraycopy(bw.getBytes(), 0, result, 0, bw.getLength()) + result case x: DateObjectInspector if x.preferWritable() => x.getPrimitiveWritableObject(data).get() // org.apache.hadoop.hive.serde2.io.TimestampWritable.set will reset current time object