parquet-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ga...@apache.org
Subject [parquet-mr] branch master updated: PARQUET-1527: [parquet-tools] cat command throw java.lang.ClassCastException (#612)
Date Tue, 12 Feb 2019 12:04:42 GMT
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 <masayuki038@gmail.com>
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");
+  }
+}


Mime
View raw message