You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ku...@apache.org on 2019/07/22 10:58:49 UTC

[carbondata] branch master updated: [HOTFIX] Fix json to carbon writer

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

kunalkapoor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/carbondata.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d0754e  [HOTFIX] Fix json to carbon writer
1d0754e is described below

commit 1d0754edd5af2a5abf9b7c6d7dd014e2fd74802a
Author: Jacky Li <ja...@qq.com>
AuthorDate: Thu Jul 11 15:33:12 2019 +0800

    [HOTFIX] Fix json to carbon writer
    
    When using SDK to write carbon files with json input, there is a NullPointerException.
    
    This closes #3323
---
 .../carbondata/sdk/file/CarbonWriterBuilder.java   |  9 ++--
 .../carbondata/sdk/file/CarbonReaderTest.java      | 53 ++++++++++++++++++++++
 2 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonWriterBuilder.java b/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonWriterBuilder.java
index d29ccf7..29ef81f 100644
--- a/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonWriterBuilder.java
+++ b/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonWriterBuilder.java
@@ -65,7 +65,10 @@ public class CarbonWriterBuilder {
   private int pageSizeInMb;
   private int blockSize;
   private long timestamp;
-  private Map<String, String> options;
+
+  // use TreeMap as keys need to be case insensitive
+  private Map<String, String> options = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+
   private String taskNo;
   private int localDictionaryThreshold;
   private boolean isLocalDictionaryEnabled = Boolean.parseBoolean(
@@ -239,10 +242,6 @@ public class CarbonWriterBuilder {
       }
     }
 
-    if (this.options == null) {
-      // convert it to treeMap as keys need to be case insensitive
-      this.options = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-    }
     this.options.putAll(options);
     return this;
   }
diff --git a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
index 9aee152..a8eb425 100644
--- a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
+++ b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
@@ -106,6 +106,59 @@ public class CarbonReaderTest extends TestCase {
     FileUtils.deleteDirectory(new File(path));
   }
 
+  @Test
+  public void testWriteAndReadJson() throws IOException, InterruptedException {
+    int numRows = 100;
+    String path = "./testWriteFiles";
+    FileUtils.deleteDirectory(new File(path));
+
+    String json = "{\"name\":\"bob\", \"age\":10}";
+
+    Schema schema = new Schema(
+        new Field[]{
+            new Field("name", "string"),
+            new Field("age", "int")});
+
+    try {
+      CarbonWriter writer = CarbonWriter.builder().outputPath(path)
+          .withJsonInput(schema).writtenBy("AvroCarbonWriterTest").build();
+
+      for (int i = 0; i < numRows; i++) {
+        writer.write(json);
+      }
+      writer.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      Assert.fail(e.getMessage());
+    }
+
+    File[] dataFiles = new File(path).listFiles(new FileFilter() {
+      @Override public boolean accept(File pathname) {
+        return pathname.getName().endsWith(CarbonCommonConstants.FACT_FILE_EXT);
+      }
+    });
+    Assert.assertNotNull(dataFiles);
+    Assert.assertEquals(1, dataFiles.length);
+
+    // read it and verify
+
+    CarbonReader reader = CarbonReader.builder(path, "_temp")
+        .projection(new String[]{"name", "age"}).build();
+
+    int i = 0;
+    while (reader.hasNext()) {
+      Object[] row = (Object[]) reader.readNextRow();
+      Assert.assertEquals("bob", row[0]);
+      Assert.assertEquals(10, row[1]);
+      i++;
+    }
+    Assert.assertEquals(i, numRows);
+
+    reader.close();
+
+    FileUtils.deleteDirectory(new File(path));
+  }
+
   @Test public void testReadWithZeroBatchSize() throws Exception {
     String path = "./testWriteFiles";
     FileUtils.deleteDirectory(new File(path));