diff --git serde/src/java/org/apache/hadoop/hive/serde2/columnar/BytesRefArrayWritable.java serde/src/java/org/apache/hadoop/hive/serde2/columnar/BytesRefArrayWritable.java index 9099988..89e12a7 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/columnar/BytesRefArrayWritable.java +++ serde/src/java/org/apache/hadoop/hive/serde2/columnar/BytesRefArrayWritable.java @@ -21,8 +21,11 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; import java.util.Arrays; +import au.com.bytecode.opencsv.CSVWriter; import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.WritableFactories; import org.apache.hadoop.io.WritableFactory; @@ -216,6 +219,25 @@ public void write(DataOutput out) throws IOException { } } + @Override + public String toString() { + StringWriter finalString = new StringWriter(); + // Write in standard OpenCSV format + // (, as delimiter, " for quotes and for escapes of quotes) + CSVWriter delimitedWriter = new CSVWriter(finalString); + try { + String[] strings = new String[size()]; + for (int i = 0; i < size(); i++) { + strings[i] = new String(get(i).getBytesCopy(), StandardCharsets.UTF_8); + } + delimitedWriter.writeNext(strings); + delimitedWriter.close(); + } catch (IOException e) { + throw new RuntimeException("Could not convert this object to string", e); + } + return finalString.toString().trim(); + } + static { WritableFactories.setFactory(BytesRefArrayWritable.class, new WritableFactory() { diff --git serde/src/test/org/apache/hadoop/hive/serde2/columnar/TestBytesRefArrayWritable.java serde/src/test/org/apache/hadoop/hive/serde2/columnar/TestBytesRefArrayWritable.java index bde43b6..16e4495 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/columnar/TestBytesRefArrayWritable.java +++ serde/src/test/org/apache/hadoop/hive/serde2/columnar/TestBytesRefArrayWritable.java @@ -47,4 +47,11 @@ public void testCompareTo() { Assert.assertEquals("An object must be equal to itself", 0, left.compareTo(left)); } + @Test + public void testToString() { + Assert.assertEquals( + "Expected standard OpenCSV formatting: ", + "\"123\",\"456\",\"789\",\"1000\"", + left.toString()); + } }