You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2014/11/17 19:35:08 UTC

svn commit: r1640203 - in /pig/trunk: src/org/apache/pig/builtin/JsonLoader.java src/org/apache/pig/builtin/JsonStorage.java test/org/apache/pig/test/TestJsonLoaderStorage.java

Author: daijy
Date: Mon Nov 17 18:35:08 2014
New Revision: 1640203

URL: http://svn.apache.org/r1640203
Log:
PIG-3615: Update the way that JsonLoader/JsonStorage deal with BigDecimal

Modified:
    pig/trunk/src/org/apache/pig/builtin/JsonLoader.java
    pig/trunk/src/org/apache/pig/builtin/JsonStorage.java
    pig/trunk/test/org/apache/pig/test/TestJsonLoaderStorage.java

Modified: pig/trunk/src/org/apache/pig/builtin/JsonLoader.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/JsonLoader.java?rev=1640203&r1=1640202&r2=1640203&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/JsonLoader.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/JsonLoader.java Mon Nov 17 18:35:08 2014
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.math.BigDecimal;
 
 import org.joda.time.format.ISODateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;

Modified: pig/trunk/src/org/apache/pig/builtin/JsonStorage.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/JsonStorage.java?rev=1640203&r1=1640202&r2=1640203&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/JsonStorage.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/JsonStorage.java Mon Nov 17 18:35:08 2014
@@ -219,7 +219,7 @@ public class JsonStorage extends StoreFu
             return;
 
         case DataType.BIGDECIMAL:
-            json.writeStringField(field.getName(), d.toString());
+            json.writeNumberField(field.getName(), (BigDecimal)d);
             return;
 
         case DataType.MAP:

Modified: pig/trunk/test/org/apache/pig/test/TestJsonLoaderStorage.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestJsonLoaderStorage.java?rev=1640203&r1=1640202&r2=1640203&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestJsonLoaderStorage.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestJsonLoaderStorage.java Mon Nov 17 18:35:08 2014
@@ -89,7 +89,7 @@ public class TestJsonLoaderStorage {
     "\"g\":\"abc\"," +
     "\"h\":\"def\"," +
     "\"i\":123456789," +
-    "\"j\":\"1234.6789\"," +
+    "\"j\":1234.6789," +
     "\"k\":{\"a\":\"ghi\"}," +
     "\"l\":{\"a\":123}," +
     "\"m\":[{\"a\":123},{\"a\":456},{\"a\":789}]" +
@@ -112,6 +112,12 @@ public class TestJsonLoaderStorage {
     "\"m\":null" +
     "}";
   
+  private static final String bigDecimalJson =
+    "{" +
+    "\"a\":123.456," +
+    "\"b\":\"123.456\"" +
+    "}";
+	
   private static final String badJson =
     "{" +
     "\"a\":\"good\"," +
@@ -230,7 +236,7 @@ public class TestJsonLoaderStorage {
 
   @SuppressWarnings("rawtypes")
   @Test
-  public void testJsonLoaderBadRow() throws Exception{
+  public void testJsonLoaderBadRow() throws IOException{
 
     String badJsonFile = createInput(badJson);
     pigServer.registerQuery("data = load '" + badJsonFile + "' using JsonLoader('a:chararray, b:chararray');");
@@ -255,6 +261,22 @@ public class TestJsonLoaderStorage {
     assertTrue(t.get(1)!=null);
     assertTrue(!tuples.hasNext());
   }
+
+  @SuppressWarnings("rawtypes")
+  @Test
+  public void testJsonLoaderBigDecimalFormats() throws IOException{
+
+    String bigDecimalJsonFile = createInput(bigDecimalJson);
+    pigServer.registerQuery("data = load '" + bigDecimalJsonFile + "' using JsonLoader('a:bigdecimal, b:bigdecimal');");
+    Iterator<Tuple> tuples = pigServer.openIterator("data");
+    
+    Tuple t = tuples.next();
+    assertTrue(t.size()==2);
+    assertTrue(t.get(0)!=null);
+    assertTrue(t.get(1)!=null);
+    assertEquals(t.get(0), t.get(1));
+    assertTrue(!tuples.hasNext());
+  }
   
   @Test
   public void testJsonLoaderNull() throws IOException {