This is an automated email from the ASF dual-hosted git repository.

gabor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-mr.git


The following commit(s) were added to refs/heads/master by this push:
     new 9461845  PARQUET-1527:  [parquet-tools] cat command throw 
java.lang.ClassCastException (#612)
9461845 is described below

commit 9461845576fd762e6a9b8d17c551f38c351b017d
Author: Masayuki Takahashi <[email protected]>
AuthorDate: Tue Feb 12 21:04:38 2019 +0900

    PARQUET-1527:  [parquet-tools] cat command throw 
java.lang.ClassCastException (#612)
---
 .../parquet/tools/read/SimpleRecordConverter.java  |   1 +
 .../tools/read/TestSimpleRecordConverter.java      | 139 +++++++++++++++++++++
 2 files changed, 140 insertions(+)

diff --git 
a/parquet-tools/src/main/java/org/apache/parquet/tools/read/SimpleRecordConverter.java
 
b/parquet-tools/src/main/java/org/apache/parquet/tools/read/SimpleRecordConverter.java
index 7a1c81d..4e61290 100644
--- 
a/parquet-tools/src/main/java/org/apache/parquet/tools/read/SimpleRecordConverter.java
+++ 
b/parquet-tools/src/main/java/org/apache/parquet/tools/read/SimpleRecordConverter.java
@@ -71,6 +71,7 @@ public class SimpleRecordConverter extends GroupConverter {
           }
         }).orElse(new SimplePrimitiveConverter(field.getName()));
       }
+      return new SimplePrimitiveConverter(field.getName());
     }
 
     GroupType groupType = field.asGroupType();
diff --git 
a/parquet-tools/src/test/java/org/apache/parquet/tools/read/TestSimpleRecordConverter.java
 
b/parquet-tools/src/test/java/org/apache/parquet/tools/read/TestSimpleRecordConverter.java
new file mode 100644
index 0000000..69a339c
--- /dev/null
+++ 
b/parquet-tools/src/test/java/org/apache/parquet/tools/read/TestSimpleRecordConverter.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.parquet.tools.read;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.Path;
+import org.apache.parquet.column.ParquetProperties;
+import org.apache.parquet.example.data.Group;
+import org.apache.parquet.example.data.simple.SimpleGroupFactory;
+import org.apache.parquet.hadoop.ParquetReader;
+import org.apache.parquet.hadoop.ParquetWriter;
+import org.apache.parquet.hadoop.example.GroupWriteSupport;
+import org.apache.parquet.hadoop.metadata.CompressionCodecName;
+import org.apache.parquet.io.api.Binary;
+import org.apache.parquet.schema.MessageType;
+import org.apache.parquet.schema.PrimitiveType;
+import org.apache.parquet.schema.Type;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.io.IOException;
+
+public class TestSimpleRecordConverter {
+
+  private static final String INT32_FIELD = "int32_field";
+  private static final String INT64_FIELD = "int64_field";
+  private static final String FLOAT_FIELD = "float_field";
+  private static final String DOUBLE_FIELD = "double_field";
+  private static final String BINARY_FIELD = "binary_field";
+  private static final String FIXED_LEN_BYTE_ARRAY_FIELD = "flba_field";
+
+  @Rule
+  public TemporaryFolder tempFolder = new TemporaryFolder();
+
+  @Test
+  public void testConverter() throws IOException {
+    try (
+      ParquetReader<SimpleRecord> reader =
+        ParquetReader.builder(new SimpleReadSupport(), new 
Path(testFile().getAbsolutePath())).build()) {
+      for (SimpleRecord record = reader.read(); record != null; record = 
reader.read()) {
+        for (SimpleRecord.NameValue value : record.getValues()) {
+          switch(value.getName()) {
+            case INT32_FIELD:
+              Assert.assertEquals(32, value.getValue());
+              break;
+            case INT64_FIELD:
+              Assert.assertEquals(64L, value.getValue());
+              break;
+            case FLOAT_FIELD:
+              Assert.assertEquals(1.0f, value.getValue());
+              break;
+            case DOUBLE_FIELD:
+              Assert.assertEquals(2.0d, value.getValue());
+              break;
+            case BINARY_FIELD:
+              Assert.assertArrayEquals("foobar".getBytes(), 
(byte[])value.getValue());
+              break;
+            case FIXED_LEN_BYTE_ARRAY_FIELD:
+              Assert.assertArrayEquals(new byte[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12 }, (byte[])value.getValue());
+              break;
+          }
+        }
+      }
+    }
+  }
+
+  @Before
+  public void setUp() throws IOException {
+    createTestParquetFile();
+  }
+
+  private static MessageType createSchema() {
+    return new MessageType("schema",
+      new PrimitiveType(Type.Repetition.REQUIRED, 
PrimitiveType.PrimitiveTypeName.INT32, INT32_FIELD),
+      new PrimitiveType(Type.Repetition.REQUIRED, 
PrimitiveType.PrimitiveTypeName.INT64, INT64_FIELD),
+      new PrimitiveType(Type.Repetition.REQUIRED, 
PrimitiveType.PrimitiveTypeName.FLOAT, FLOAT_FIELD),
+      new PrimitiveType(Type.Repetition.REQUIRED, 
PrimitiveType.PrimitiveTypeName.DOUBLE, DOUBLE_FIELD),
+      new PrimitiveType(Type.Repetition.REQUIRED, 
PrimitiveType.PrimitiveTypeName.BINARY, BINARY_FIELD),
+      new PrimitiveType(Type.Repetition.REQUIRED,
+        PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY, 12, 
FIXED_LEN_BYTE_ARRAY_FIELD)
+    );
+  }
+
+  private void createTestParquetFile() throws IOException {
+    Path fsPath = new Path(testFile().getPath());
+    Configuration conf = new Configuration();
+
+    MessageType schema = createSchema();
+    SimpleGroupFactory fact = new SimpleGroupFactory(schema);
+    GroupWriteSupport.setSchema(schema, conf);
+
+    try (
+      ParquetWriter<Group> writer = new ParquetWriter<>(
+        fsPath,
+        new GroupWriteSupport(),
+        CompressionCodecName.UNCOMPRESSED,
+        1024,
+        1024,
+        512,
+        true,
+        false,
+        ParquetProperties.WriterVersion.PARQUET_2_0,
+        conf)) {
+      writer.write(fact.newGroup()
+       .append(INT32_FIELD, 32)
+       .append(INT64_FIELD, 64L)
+       .append(FLOAT_FIELD, 1.0f)
+       .append(DOUBLE_FIELD, 2.0d)
+       .append(BINARY_FIELD, Binary.fromString("foobar"))
+       .append(FIXED_LEN_BYTE_ARRAY_FIELD,
+         Binary.fromConstantByteArray(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12 })));
+    }
+  }
+
+  private File testFile() {
+    return new File(this.tempFolder.getRoot(), getClass().getSimpleName() + 
".parquet");
+  }
+}

Reply via email to