{"action":"created","comment":{"url":"https://api.github.com/repos/apache/parquet-mr/pulls/comments/30858896","id":30858896,"diff_hunk":"@@ -425,4 +285,375 @@ private static GenericData getDataModel(Configuration conf) {\n         AVRO_DATA_SUPPLIER, SpecificDataSupplier.class, AvroDataSupplier.class);\n     return ReflectionUtils.newInstance(suppClass, conf).get();\n   }\n+\n+  private abstract class ListWriter {\n+    public void writeList(GroupType schema, Schema avroSchema, Object value) {\n+      recordConsumer.startGroup(); // group wrapper (original type LIST)\n+      if (value instanceof Collection) {\n+        writeCollection(schema, avroSchema, (Collection) value);\n+      } else {\n+        Class<?> arrayClass = value.getClass();\n+        Preconditions.checkArgument(arrayClass.isArray(),\n+            \"Cannot write unless collection or array: \" + arrayClass.getName());\n+        writeJavaArray(schema, avroSchema, arrayClass, value);\n+      }\n+      recordConsumer.endGroup();\n+    }\n+\n+    public void writeJavaArray(GroupType schema, Schema avroSchema,\n+                               Class<?> arrayClass, Object value) {\n+      Class<?> elementClass = arrayClass.getComponentType();\n+\n+      if (!elementClass.isPrimitive()) {\n+        writeObjectArray(schema, avroSchema, (Object[]) value);\n+        return;\n+      }\n+\n+      switch (avroSchema.getElementType().getType()) {\n+        case BOOLEAN:\n+          Preconditions.checkArgument(elementClass == boolean.class,\n+              \"Cannot write as boolean array: \" + arrayClass.getName());\n+          writeBooleanArray((boolean[]) value);\n+          break;\n+        case INT:\n+          if (elementClass == byte.class) {\n+            writeByteArray((byte[]) value);\n+          } else if (elementClass == char.class) {\n+            writeCharArray((char[]) value);\n+          } else if (elementClass == short.class) {\n+            writeShortArray((short[]) value);\n+          } else if (elementClass == int.class) {\n+            writeIntArray((int[]) value);\n+          } else {\n+            throw new IllegalArgumentException(\n+                \"Cannot write as an int array: \" + arrayClass.getName());\n+          }\n+          break;\n+        case LONG:\n+          Preconditions.checkArgument(elementClass == long.class,\n+              \"Cannot write as long array: \" + arrayClass.getName());\n+          writeLongArray((long[]) value);\n+          break;\n+        case FLOAT:\n+          Preconditions.checkArgument(elementClass == float.class,\n+              \"Cannot write as float array: \" + arrayClass.getName());\n+          writeFloatArray((float[]) value);\n+          break;\n+        case DOUBLE:\n+          Preconditions.checkArgument(elementClass == double.class,\n+              \"Cannot write as double array: \" + arrayClass.getName());\n+          writeDoubleArray((double[]) value);\n+          break;\n+        default:\n+          throw new IllegalArgumentException(\"Cannot write \" +\n+              avroSchema.getElementType() + \" array: \" + arrayClass.getName());\n+      }\n+    }\n+\n+    protected abstract void writeCollection(\n+        GroupType type, Schema schema, Collection<?> collection);\n+\n+    protected abstract void writeObjectArray(\n+        GroupType type, Schema schema, Object[] array);\n+\n+    protected abstract void writeBooleanArray(boolean[] array);\n+\n+    protected abstract void writeByteArray(byte[] array);\n+\n+    protected abstract void writeShortArray(short[] array);\n+\n+    protected abstract void writeCharArray(char[] array);\n+\n+    protected abstract void writeIntArray(int[] array);\n+\n+    protected abstract void writeLongArray(long[] array);\n+\n+    protected abstract void writeFloatArray(float[] array);\n+\n+    protected abstract void writeDoubleArray(double[] array);\n+  }\n+\n+  /**\n+   * For backward-compatibility. This preserves how lists were written in 1.x.\n+   */\n+  private class TwoLevelWriter extends ListWriter {\n+    @Override\n+    public void writeCollection(GroupType schema, Schema avroSchema,\n+                                Collection<?> array) {\n+      if (array.size() > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (Object elt : array) {\n+          writeValue(schema.getType(0), avroSchema.getElementType(), elt);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeObjectArray(GroupType type, Schema schema,\n+                                    Object[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (Object element : array) {\n+          writeValue(type.getType(0), schema.getElementType(), element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeBooleanArray(boolean[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (boolean element : array) {\n+          recordConsumer.addBoolean(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeByteArray(byte[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (byte element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeShortArray(short[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (short element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeCharArray(char[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (char element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeIntArray(int[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (int element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeLongArray(long[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (long element : array) {\n+          recordConsumer.addLong(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeFloatArray(float[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (float element : array) {\n+          recordConsumer.addFloat(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeDoubleArray(double[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        for (double element : array) {\n+          recordConsumer.addDouble(element);\n+        }\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+  }\n+\n+  private class ThreeLevelWriter extends ListWriter {\n+    @Override\n+    protected void writeCollection(GroupType type, Schema schema, Collection<?> collection) {\n+      if (collection.size() > 0) {\n+        recordConsumer.startField(LIST_REPEATED_NAME, 0);\n+        GroupType repeatedType = type.getType(0).asGroupType();\n+        Type elementType = repeatedType.getType(0);\n+        for (Object element : collection) {\n+          recordConsumer.startGroup(); // repeated group array, middle layer\n+          if (element != null) {\n+            recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+            writeValue(elementType, schema.getElementType(), element);\n+            recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+          } else if (!elementType.isRepetition(Type.Repetition.OPTIONAL)) {\n+            throw new RuntimeException(\n+                \"Null list element for \" + schema.getName());\n+          }\n+          recordConsumer.endGroup();\n+        }\n+        recordConsumer.endField(LIST_REPEATED_NAME, 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeObjectArray(GroupType type, Schema schema,\n+                                    Object[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(LIST_REPEATED_NAME, 0);\n+        GroupType repeatedType = type.getType(0).asGroupType();\n+        Type elementType = repeatedType.getType(0);\n+        for (Object element : array) {\n+          recordConsumer.startGroup(); // repeated group array, middle layer\n+          if (element != null) {\n+            recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+            writeValue(elementType, schema.getElementType(), element);\n+            recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+          } else if (!elementType.isRepetition(Type.Repetition.OPTIONAL)) {\n+            throw new RuntimeException(\n+                \"Null list element for \" + schema.getName());\n+          }\n+          recordConsumer.endGroup();\n+        }\n+        recordConsumer.endField(LIST_REPEATED_NAME, 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeBooleanArray(boolean[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(LIST_REPEATED_NAME, 0);\n+        recordConsumer.startGroup(); // repeated group array, middle layer\n+        recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+        for (boolean element : array) {\n+          recordConsumer.addBoolean(element);\n+        }\n+        recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+        recordConsumer.endGroup();\n+        recordConsumer.endField(LIST_REPEATED_NAME, 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeByteArray(byte[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(LIST_REPEATED_NAME, 0);\n+        recordConsumer.startGroup(); // repeated group array, middle layer\n+        recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+        for (byte element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+        recordConsumer.endGroup();\n+        recordConsumer.endField(LIST_REPEATED_NAME, 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeShortArray(short[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        recordConsumer.startGroup(); // repeated group array, middle layer\n+        recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+        for (short element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+        recordConsumer.endGroup();\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeCharArray(char[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        recordConsumer.startGroup(); // repeated group array, middle layer\n+        recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+        for (char element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+        recordConsumer.endGroup();\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeIntArray(int[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);\n+        recordConsumer.startGroup(); // repeated group array, middle layer\n+        recordConsumer.startField(LIST_ELEMENT_NAME, 0);\n+        for (int element : array) {\n+          recordConsumer.addInteger(element);\n+        }\n+        recordConsumer.endField(LIST_ELEMENT_NAME, 0);\n+        recordConsumer.endGroup();\n+        recordConsumer.endField(\"array\", 0);\n+      }\n+    }\n+\n+    @Override\n+    protected void writeLongArray(long[] array) {\n+      if (array.length > 0) {\n+        recordConsumer.startField(\"array\", 0);","path":"parquet-avro/src/main/java/org/apache/parquet/avro/AvroWriteSupport.java","position":584,"original_position":584,"commit_id":"67ed2f41e743b8bde1cd50ff3cc73498055db099","original_commit_id":"67ed2f41e743b8bde1cd50ff3cc73498055db099","user":{"login":"rdblue","id":87915,"avatar_url":"https://avatars.githubusercontent.com/u/87915?v=3","gravatar_id":"","url":"https://api.github.com/users/rdblue","html_url":"https://github.com/rdblue","followers_url":"https://api.github.com/users/rdblue/followers","following_url":"https://api.github.com/users/rdblue/following{/other_user}","gists_url":"https://api.github.com/users/rdblue/gists{/gist_id}","starred_url":"https://api.github.com/users/rdblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rdblue/subscriptions","organizations_url":"https://api.github.com/users/rdblue/orgs","repos_url":"https://api.github.com/users/rdblue/repos","events_url":"https://api.github.com/users/rdblue/events{/privacy}","received_events_url":"https://api.github.com/users/rdblue/received_events","type":"User","site_admin":false},"body":"This shouldn't even be array. it should be LIST_REPEATED_NAME.","created_at":"2015-05-21T23:38:06Z","updated_at":"2015-05-21T23:38:06Z","html_url":"https://github.com/apache/parquet-mr/pull/198#discussion_r30858896","pull_request_url":"https://api.github.com/repos/apache/parquet-mr/pulls/198","_links":{"self":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/comments/30858896"},"html":{"href":"https://github.com/apache/parquet-mr/pull/198#discussion_r30858896"},"pull_request":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/198"}}},"pull_request":{"url":"https://api.github.com/repos/apache/parquet-mr/pulls/198","id":35688182,"html_url":"https://github.com/apache/parquet-mr/pull/198","diff_url":"https://github.com/apache/parquet-mr/pull/198.diff","patch_url":"https://github.com/apache/parquet-mr/pull/198.patch","issue_url":"https://api.github.com/repos/apache/parquet-mr/issues/198","number":198,"state":"open","locked":false,"title":"PARQUET-285: Implement 3-level lists in Avro","user":{"login":"rdblue","id":87915,"avatar_url":"https://avatars.githubusercontent.com/u/87915?v=3","gravatar_id":"","url":"https://api.github.com/users/rdblue","html_url":"https://github.com/rdblue","followers_url":"https://api.github.com/users/rdblue/followers","following_url":"https://api.github.com/users/rdblue/following{/other_user}","gists_url":"https://api.github.com/users/rdblue/gists{/gist_id}","starred_url":"https://api.github.com/users/rdblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rdblue/subscriptions","organizations_url":"https://api.github.com/users/rdblue/orgs","repos_url":"https://api.github.com/users/rdblue/repos","events_url":"https://api.github.com/users/rdblue/events{/privacy}","received_events_url":"https://api.github.com/users/rdblue/received_events","type":"User","site_admin":false},"body":"This includes the write-side the changes from #83 that implement the 3-level list structure for parquet-avro. The old commit was https://github.com/rdblue/parquet-mr/commit/3589a7367c829b9eabc36b2e2e1cab31685415eb.","created_at":"2015-05-19T01:11:04Z","updated_at":"2015-05-21T23:38:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e8580d851c5081ce18ca52db14505681de90b1a7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/parquet-mr/pulls/198/commits","review_comments_url":"https://api.github.com/repos/apache/parquet-mr/pulls/198/comments","review_comment_url":"https://api.github.com/repos/apache/parquet-mr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/parquet-mr/issues/198/comments","statuses_url":"https://api.github.com/repos/apache/parquet-mr/statuses/67ed2f41e743b8bde1cd50ff3cc73498055db099","head":{"label":"rdblue:PARQUET-285-avro-nested-lists","ref":"PARQUET-285-avro-nested-lists","sha":"67ed2f41e743b8bde1cd50ff3cc73498055db099","user":{"login":"rdblue","id":87915,"avatar_url":"https://avatars.githubusercontent.com/u/87915?v=3","gravatar_id":"","url":"https://api.github.com/users/rdblue","html_url":"https://github.com/rdblue","followers_url":"https://api.github.com/users/rdblue/followers","following_url":"https://api.github.com/users/rdblue/following{/other_user}","gists_url":"https://api.github.com/users/rdblue/gists{/gist_id}","starred_url":"https://api.github.com/users/rdblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rdblue/subscriptions","organizations_url":"https://api.github.com/users/rdblue/orgs","repos_url":"https://api.github.com/users/rdblue/repos","events_url":"https://api.github.com/users/rdblue/events{/privacy}","received_events_url":"https://api.github.com/users/rdblue/received_events","type":"User","site_admin":false},"repo":{"id":21755687,"name":"parquet-mr","full_name":"rdblue/parquet-mr","owner":{"login":"rdblue","id":87915,"avatar_url":"https://avatars.githubusercontent.com/u/87915?v=3","gravatar_id":"","url":"https://api.github.com/users/rdblue","html_url":"https://github.com/rdblue","followers_url":"https://api.github.com/users/rdblue/followers","following_url":"https://api.github.com/users/rdblue/following{/other_user}","gists_url":"https://api.github.com/users/rdblue/gists{/gist_id}","starred_url":"https://api.github.com/users/rdblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rdblue/subscriptions","organizations_url":"https://api.github.com/users/rdblue/orgs","repos_url":"https://api.github.com/users/rdblue/repos","events_url":"https://api.github.com/users/rdblue/events{/privacy}","received_events_url":"https://api.github.com/users/rdblue/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rdblue/parquet-mr","description":"Mirror of Apache Parquet","fork":true,"url":"https://api.github.com/repos/rdblue/parquet-mr","forks_url":"https://api.github.com/repos/rdblue/parquet-mr/forks","keys_url":"https://api.github.com/repos/rdblue/parquet-mr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rdblue/parquet-mr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rdblue/parquet-mr/teams","hooks_url":"https://api.github.com/repos/rdblue/parquet-mr/hooks","issue_events_url":"https://api.github.com/repos/rdblue/parquet-mr/issues/events{/number}","events_url":"https://api.github.com/repos/rdblue/parquet-mr/events","assignees_url":"https://api.github.com/repos/rdblue/parquet-mr/assignees{/user}","branches_url":"https://api.github.com/repos/rdblue/parquet-mr/branches{/branch}","tags_url":"https://api.github.com/repos/rdblue/parquet-mr/tags","blobs_url":"https://api.github.com/repos/rdblue/parquet-mr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rdblue/parquet-mr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rdblue/parquet-mr/git/refs{/sha}","trees_url":"https://api.github.com/repos/rdblue/parquet-mr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rdblue/parquet-mr/statuses/{sha}","languages_url":"https://api.github.com/repos/rdblue/parquet-mr/languages","stargazers_url":"https://api.github.com/repos/rdblue/parquet-mr/stargazers","contributors_url":"https://api.github.com/repos/rdblue/parquet-mr/contributors","subscribers_url":"https://api.github.com/repos/rdblue/parquet-mr/subscribers","subscription_url":"https://api.github.com/repos/rdblue/parquet-mr/subscription","commits_url":"https://api.github.com/repos/rdblue/parquet-mr/commits{/sha}","git_commits_url":"https://api.github.com/repos/rdblue/parquet-mr/git/commits{/sha}","comments_url":"https://api.github.com/repos/rdblue/parquet-mr/comments{/number}","issue_comment_url":"https://api.github.com/repos/rdblue/parquet-mr/issues/comments{/number}","contents_url":"https://api.github.com/repos/rdblue/parquet-mr/contents/{+path}","compare_url":"https://api.github.com/repos/rdblue/parquet-mr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rdblue/parquet-mr/merges","archive_url":"https://api.github.com/repos/rdblue/parquet-mr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rdblue/parquet-mr/downloads","issues_url":"https://api.github.com/repos/rdblue/parquet-mr/issues{/number}","pulls_url":"https://api.github.com/repos/rdblue/parquet-mr/pulls{/number}","milestones_url":"https://api.github.com/repos/rdblue/parquet-mr/milestones{/number}","notifications_url":"https://api.github.com/repos/rdblue/parquet-mr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rdblue/parquet-mr/labels{/name}","releases_url":"https://api.github.com/repos/rdblue/parquet-mr/releases{/id}","created_at":"2014-07-12T00:08:35Z","updated_at":"2015-04-29T00:20:04Z","pushed_at":"2015-05-21T22:22:17Z","git_url":"git://github.com/rdblue/parquet-mr.git","ssh_url":"git@github.com:rdblue/parquet-mr.git","clone_url":"https://github.com/rdblue/parquet-mr.git","svn_url":"https://github.com/rdblue/parquet-mr","homepage":null,"size":14001,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"a458e1a2f3cd1ccd692f1530b64d3143c9beda51","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":20675636,"name":"parquet-mr","full_name":"apache/parquet-mr","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/parquet-mr","description":"Mirror of Apache Parquet","fork":false,"url":"https://api.github.com/repos/apache/parquet-mr","forks_url":"https://api.github.com/repos/apache/parquet-mr/forks","keys_url":"https://api.github.com/repos/apache/parquet-mr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/parquet-mr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/parquet-mr/teams","hooks_url":"https://api.github.com/repos/apache/parquet-mr/hooks","issue_events_url":"https://api.github.com/repos/apache/parquet-mr/issues/events{/number}","events_url":"https://api.github.com/repos/apache/parquet-mr/events","assignees_url":"https://api.github.com/repos/apache/parquet-mr/assignees{/user}","branches_url":"https://api.github.com/repos/apache/parquet-mr/branches{/branch}","tags_url":"https://api.github.com/repos/apache/parquet-mr/tags","blobs_url":"https://api.github.com/repos/apache/parquet-mr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/parquet-mr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/parquet-mr/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/parquet-mr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/parquet-mr/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/parquet-mr/languages","stargazers_url":"https://api.github.com/repos/apache/parquet-mr/stargazers","contributors_url":"https://api.github.com/repos/apache/parquet-mr/contributors","subscribers_url":"https://api.github.com/repos/apache/parquet-mr/subscribers","subscription_url":"https://api.github.com/repos/apache/parquet-mr/subscription","commits_url":"https://api.github.com/repos/apache/parquet-mr/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/parquet-mr/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/parquet-mr/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/parquet-mr/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/parquet-mr/contents/{+path}","compare_url":"https://api.github.com/repos/apache/parquet-mr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/parquet-mr/merges","archive_url":"https://api.github.com/repos/apache/parquet-mr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/parquet-mr/downloads","issues_url":"https://api.github.com/repos/apache/parquet-mr/issues{/number}","pulls_url":"https://api.github.com/repos/apache/parquet-mr/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/parquet-mr/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/parquet-mr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/parquet-mr/labels{/name}","releases_url":"https://api.github.com/repos/apache/parquet-mr/releases{/id}","created_at":"2014-06-10T07:00:07Z","updated_at":"2015-05-21T04:38:51Z","pushed_at":"2015-05-21T23:18:22Z","git_url":"git://github.com/apache/parquet-mr.git","ssh_url":"git@github.com:apache/parquet-mr.git","clone_url":"https://github.com/apache/parquet-mr.git","svn_url":"https://github.com/apache/parquet-mr","homepage":null,"size":93281,"stargazers_count":90,"watchers_count":90,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":124,"mirror_url":"git://git.apache.org/incubator-parquet-mr.git","open_issues_count":40,"forks":124,"open_issues":40,"watchers":90,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/198"},"html":{"href":"https://github.com/apache/parquet-mr/pull/198"},"issue":{"href":"https://api.github.com/repos/apache/parquet-mr/issues/198"},"comments":{"href":"https://api.github.com/repos/apache/parquet-mr/issues/198/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/198/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/parquet-mr/pulls/198/commits"},"statuses":{"href":"https://api.github.com/repos/apache/parquet-mr/statuses/67ed2f41e743b8bde1cd50ff3cc73498055db099"}}}}