{"action":"created","comment":{"url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/comments/111548963","pull_request_review_id":32802920,"id":111548963,"diff_hunk":"@@ -0,0 +1,553 @@\n+/*\n+ * Licensed to the Apache Software Foundation (ASF) under one\n+ * or more contributor license agreements.  See the NOTICE file\n+ * distributed with this work for additional information\n+ * regarding copyright ownership.  The ASF licenses this file\n+ * to you under the Apache License, Version 2.0 (the\n+ * \"License\"); you may not use this file except in compliance\n+ * with the License.  You may obtain a copy of the License at\n+ *\n+ *   http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing,\n+ * software distributed under the License is distributed on an\n+ * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n+ * KIND, either express or implied.  See the License for the\n+ * specific language governing permissions and limitations\n+ * under the License.\n+ */\n+package hivemall.topicmodel;\n+\n+import hivemall.UDTFWithOptions;\n+import hivemall.utils.hadoop.HiveUtils;\n+import hivemall.utils.io.FileUtils;\n+import hivemall.utils.io.NioStatefullSegment;\n+import hivemall.utils.lang.NumberUtils;\n+import hivemall.utils.lang.Primitives;\n+import hivemall.utils.lang.SizeOf;\n+\n+import java.io.File;\n+import java.io.IOException;\n+import java.nio.ByteBuffer;\n+import java.util.ArrayList;\n+import java.util.Arrays;\n+import java.util.List;\n+import java.util.Map;\n+import java.util.SortedMap;\n+\n+import javax.annotation.Nonnegative;\n+import javax.annotation.Nonnull;\n+\n+import org.apache.commons.cli.CommandLine;\n+import org.apache.commons.cli.Options;\n+import org.apache.commons.logging.Log;\n+import org.apache.commons.logging.LogFactory;\n+import org.apache.hadoop.hive.ql.exec.Description;\n+import org.apache.hadoop.hive.ql.exec.UDFArgumentException;\n+import org.apache.hadoop.hive.ql.metadata.HiveException;\n+import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;\n+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;\n+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;\n+import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;\n+import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;\n+import org.apache.hadoop.io.FloatWritable;\n+import org.apache.hadoop.io.IntWritable;\n+import org.apache.hadoop.io.Text;\n+import org.apache.hadoop.mapred.Counters;\n+import org.apache.hadoop.mapred.Reporter;\n+\n+import com.google.common.annotations.VisibleForTesting;\n+\n+@Description(name = \"train_lda\", value = \"_FUNC_(array<string> words[, const string options])\"\n+        + \" - Returns a relation consists of <int topic, string word, float score>\")\n+public class LDAUDTF extends UDTFWithOptions {\n+    private static final Log logger = LogFactory.getLog(LDAUDTF.class);\n+\n+    // Options\n+    protected int topic;\n+    protected float alpha;\n+    protected float eta;\n+    protected int numDoc;\n+    protected double tau0;\n+    protected double kappa;\n+    protected int iterations;\n+    protected double delta;\n+    protected double eps;\n+    protected int miniBatchSize;\n+\n+    // if `num_doc` option is not given, this flag will be true\n+    // in that case, UDTF automatically sets `count` value to the _D parameter in an online LDA model\n+    protected boolean isAutoD;\n+\n+    // number of proceeded training samples\n+    protected long count;\n+\n+    protected String[][] miniBatch;\n+    protected int miniBatchCount;\n+\n+    protected OnlineLDAModel model;\n+\n+    protected ListObjectInspector wordCountsOI;\n+\n+    // for iterations\n+    protected NioStatefullSegment fileIO;\n+    protected ByteBuffer inputBuf;\n+\n+    public LDAUDTF() {\n+        this.topic = 10;\n+        this.alpha = 1.f / topic;\n+        this.eta = 1.f / topic;\n+        this.numDoc = -1;\n+        this.tau0 = 64.d;\n+        this.kappa = 0.7;\n+        this.iterations = 1;\n+        this.delta = 1E-5d;\n+        this.eps = 1E-1d;\n+        this.miniBatchSize = 1; // truly online setting\n+    }\n+\n+    @Override\n+    protected Options getOptions() {\n+        Options opts = new Options();\n+        opts.addOption(\"k\", \"topic\", true, \"The number of topics [default: 10]\");\n+        opts.addOption(\"alpha\", true, \"The hyperparameter for theta [default: 1/k]\");\n+        opts.addOption(\"eta\", true, \"The hyperparameter for beta [default: 1/k]\");\n+        opts.addOption(\"d\", \"num_doc\", true, \"The total number of documents [default: auto]\");\n+        opts.addOption(\"tau\", \"tau0\", true,\n+            \"The parameter which downweights early iterations [default: 64.0]\");\n+        opts.addOption(\"kappa\", true, \"Exponential decay rate (i.e., learning rate) [default: 0.7]\");\n+        opts.addOption(\"iter\", \"iterations\", true, \"The maximum number of iterations [default: 1]\");\n+        opts.addOption(\"delta\", true, \"Check convergence in the expectation step [default: 1E-5]\");\n+        opts.addOption(\"eps\", \"epsilon\", true,\n+            \"Check convergence based on the difference of perplexity [default: 1E-1]\");\n+        opts.addOption(\"s\", \"mini_batch_size\", true, \"Repeat model updating per mini-batch [default: 1]\");\n+        return opts;\n+    }\n+\n+    @Override\n+    protected CommandLine processOptions(ObjectInspector[] argOIs) throws UDFArgumentException {\n+        CommandLine cl = null;\n+\n+        if (argOIs.length >= 2) {\n+            String rawArgs = HiveUtils.getConstString(argOIs[1]);\n+            cl = parseOptions(rawArgs);\n+            this.topic = Primitives.parseInt(cl.getOptionValue(\"topic\"), 10);\n+            this.alpha = Primitives.parseFloat(cl.getOptionValue(\"alpha\"), 1.f / topic);\n+            this.eta = Primitives.parseFloat(cl.getOptionValue(\"eta\"), 1.f / topic);\n+            this.numDoc = Primitives.parseInt(cl.getOptionValue(\"num_doc\"), -1);\n+            this.tau0 = Primitives.parseDouble(cl.getOptionValue(\"tau0\"), 64.d);\n+            if (tau0 <= 0.d) {\n+                throw new UDFArgumentException(\"'-tau0' must be positive: \" + tau0);\n+            }\n+            this.kappa = Primitives.parseDouble(cl.getOptionValue(\"kappa\"), 0.7d);\n+            if (kappa <= 0.5 || kappa > 1.d) {\n+                throw new UDFArgumentException(\"'-kappa' must be in (0.5, 1.0]: \" + kappa);\n+            }\n+            this.iterations = Primitives.parseInt(cl.getOptionValue(\"iterations\"), 1);\n+            if (iterations < 1) {\n+                throw new UDFArgumentException(\n+                    \"'-iterations' must be greater than or equals to 1: \" + iterations);\n+            }\n+            this.delta = Primitives.parseDouble(cl.getOptionValue(\"delta\"), 1E-5d);\n+            this.eps = Primitives.parseDouble(cl.getOptionValue(\"epsilon\"), 1E-1d);\n+            this.miniBatchSize = Primitives.parseInt(cl.getOptionValue(\"mini_batch_size\"), 1);\n+        }\n+\n+        return cl;\n+    }\n+\n+    @Override\n+    public StructObjectInspector initialize(ObjectInspector[] argOIs) throws UDFArgumentException {\n+        if (argOIs.length < 1) {\n+            throw new UDFArgumentException(\n+                \"_FUNC_ takes 1 arguments: array<string> words [, const string options]\");\n+        }\n+\n+        this.wordCountsOI = HiveUtils.asListOI(argOIs[0]);\n+        HiveUtils.validateFeatureOI(wordCountsOI.getListElementObjectInspector());\n+\n+        processOptions(argOIs);\n+\n+        this.model = new OnlineLDAModel(topic, alpha, eta, numDoc, tau0, kappa, delta);\n+        this.count = 0L;\n+        this.isAutoD = (numDoc < 0);\n+        this.miniBatch = new String[miniBatchSize][];\n+        this.miniBatchCount = 0;\n+\n+        ArrayList<String> fieldNames = new ArrayList<String>();\n+        ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();\n+        fieldNames.add(\"topic\");\n+        fieldOIs.add(PrimitiveObjectInspectorFactory.writableIntObjectInspector);\n+        fieldNames.add(\"word\");\n+        fieldOIs.add(PrimitiveObjectInspectorFactory.writableStringObjectInspector);\n+        fieldNames.add(\"score\");\n+        fieldOIs.add(PrimitiveObjectInspectorFactory.writableFloatObjectInspector);\n+\n+        return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);\n+    }\n+\n+    @Override\n+    public void process(Object[] args) throws HiveException {\n+        int length = wordCountsOI.getListLength(args[0]);\n+        String[] wordCounts = new String[length];\n+        int j = 0;\n+        for (int i = 0; i < length; i++) {\n+            Object o = wordCountsOI.getListElement(args[0], i);\n+            if (o == null) {\n+                continue;\n+            }\n+            String s = o.toString();\n+            wordCounts[j] = s;\n+            j++;\n+        }\n+\n+        count++;\n+        if (isAutoD) {\n+            model.setNumTotalDocs((int) count);\n+        }\n+\n+        recordTrainSampleToTempFile(wordCounts);\n+\n+        miniBatch[miniBatchCount] = wordCounts;\n+        miniBatchCount++;\n+\n+        if (miniBatchCount == miniBatchSize) {\n+            model.train(miniBatch);","path":"core/src/main/java/hivemall/topicmodel/LDAUDTF.java","position":215,"original_position":215,"commit_id":"72edf7fc75e3dd2dcb54dc0f743518f79e8112b7","original_commit_id":"72edf7fc75e3dd2dcb54dc0f743518f79e8112b7","user":{"login":"myui","id":1163783,"avatar_url":"https://avatars0.githubusercontent.com/u/1163783?v=3","gravatar_id":"","url":"https://api.github.com/users/myui","html_url":"https://github.com/myui","followers_url":"https://api.github.com/users/myui/followers","following_url":"https://api.github.com/users/myui/following{/other_user}","gists_url":"https://api.github.com/users/myui/gists{/gist_id}","starred_url":"https://api.github.com/users/myui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/myui/subscriptions","organizations_url":"https://api.github.com/users/myui/orgs","repos_url":"https://api.github.com/users/myui/repos","events_url":"https://api.github.com/users/myui/events{/privacy}","received_events_url":"https://api.github.com/users/myui/received_events","type":"User","site_admin":false},"body":"null element handling for `miniBatch` is required","created_at":"2017-04-14T08:53:47Z","updated_at":"2017-04-14T08:56:52Z","html_url":"https://github.com/apache/incubator-hivemall/pull/66#discussion_r111548963","pull_request_url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66","_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/comments/111548963"},"html":{"href":"https://github.com/apache/incubator-hivemall/pull/66#discussion_r111548963"},"pull_request":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66"}}},"pull_request":{"url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66","id":113893275,"html_url":"https://github.com/apache/incubator-hivemall/pull/66","diff_url":"https://github.com/apache/incubator-hivemall/pull/66.diff","patch_url":"https://github.com/apache/incubator-hivemall/pull/66.patch","issue_url":"https://api.github.com/repos/apache/incubator-hivemall/issues/66","number":66,"state":"open","locked":false,"title":"[HIVEMALL-91] Implement Online LDA","user":{"login":"takuti","id":853567,"avatar_url":"https://avatars2.githubusercontent.com/u/853567?v=3","gravatar_id":"","url":"https://api.github.com/users/takuti","html_url":"https://github.com/takuti","followers_url":"https://api.github.com/users/takuti/followers","following_url":"https://api.github.com/users/takuti/following{/other_user}","gists_url":"https://api.github.com/users/takuti/gists{/gist_id}","starred_url":"https://api.github.com/users/takuti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takuti/subscriptions","organizations_url":"https://api.github.com/users/takuti/orgs","repos_url":"https://api.github.com/users/takuti/repos","events_url":"https://api.github.com/users/takuti/events{/privacy}","received_events_url":"https://api.github.com/users/takuti/received_events","type":"User","site_admin":false},"body":"## What changes were proposed in this pull request?\r\n\r\nImplement Online LDA model and its UDTF\r\n\r\n## What type of PR is it?\r\n\r\nFeature\r\n\r\n## What is the Jira issue?\r\n\r\nhttps://issues.apache.org/jira/browse/HIVEMALL-91\r\n\r\n## How was this patch tested?\r\n\r\nUnit test and manual test\r\n\r\n## How to use this feature?\r\n\r\nSee [HERE](https://gist.github.com/takuti/d24324e76d4b2ec7dc4b1d50a4d192d8)","created_at":"2017-04-03T09:50:12Z","updated_at":"2017-04-14T08:56:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e6d488355558c000c96a564cb1e726702db4d9a1","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66/commits","review_comments_url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66/comments","review_comment_url":"https://api.github.com/repos/apache/incubator-hivemall/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/incubator-hivemall/issues/66/comments","statuses_url":"https://api.github.com/repos/apache/incubator-hivemall/statuses/72edf7fc75e3dd2dcb54dc0f743518f79e8112b7","head":{"label":"takuti:lda","ref":"lda","sha":"72edf7fc75e3dd2dcb54dc0f743518f79e8112b7","user":{"login":"takuti","id":853567,"avatar_url":"https://avatars2.githubusercontent.com/u/853567?v=3","gravatar_id":"","url":"https://api.github.com/users/takuti","html_url":"https://github.com/takuti","followers_url":"https://api.github.com/users/takuti/followers","following_url":"https://api.github.com/users/takuti/following{/other_user}","gists_url":"https://api.github.com/users/takuti/gists{/gist_id}","starred_url":"https://api.github.com/users/takuti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takuti/subscriptions","organizations_url":"https://api.github.com/users/takuti/orgs","repos_url":"https://api.github.com/users/takuti/repos","events_url":"https://api.github.com/users/takuti/events{/privacy}","received_events_url":"https://api.github.com/users/takuti/received_events","type":"User","site_admin":false},"repo":{"id":76002744,"name":"incubator-hivemall","full_name":"takuti/incubator-hivemall","owner":{"login":"takuti","id":853567,"avatar_url":"https://avatars2.githubusercontent.com/u/853567?v=3","gravatar_id":"","url":"https://api.github.com/users/takuti","html_url":"https://github.com/takuti","followers_url":"https://api.github.com/users/takuti/followers","following_url":"https://api.github.com/users/takuti/following{/other_user}","gists_url":"https://api.github.com/users/takuti/gists{/gist_id}","starred_url":"https://api.github.com/users/takuti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takuti/subscriptions","organizations_url":"https://api.github.com/users/takuti/orgs","repos_url":"https://api.github.com/users/takuti/repos","events_url":"https://api.github.com/users/takuti/events{/privacy}","received_events_url":"https://api.github.com/users/takuti/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/takuti/incubator-hivemall","description":"Mirror of Apache Hivemall (incubating)","fork":true,"url":"https://api.github.com/repos/takuti/incubator-hivemall","forks_url":"https://api.github.com/repos/takuti/incubator-hivemall/forks","keys_url":"https://api.github.com/repos/takuti/incubator-hivemall/keys{/key_id}","collaborators_url":"https://api.github.com/repos/takuti/incubator-hivemall/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/takuti/incubator-hivemall/teams","hooks_url":"https://api.github.com/repos/takuti/incubator-hivemall/hooks","issue_events_url":"https://api.github.com/repos/takuti/incubator-hivemall/issues/events{/number}","events_url":"https://api.github.com/repos/takuti/incubator-hivemall/events","assignees_url":"https://api.github.com/repos/takuti/incubator-hivemall/assignees{/user}","branches_url":"https://api.github.com/repos/takuti/incubator-hivemall/branches{/branch}","tags_url":"https://api.github.com/repos/takuti/incubator-hivemall/tags","blobs_url":"https://api.github.com/repos/takuti/incubator-hivemall/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/takuti/incubator-hivemall/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/takuti/incubator-hivemall/git/refs{/sha}","trees_url":"https://api.github.com/repos/takuti/incubator-hivemall/git/trees{/sha}","statuses_url":"https://api.github.com/repos/takuti/incubator-hivemall/statuses/{sha}","languages_url":"https://api.github.com/repos/takuti/incubator-hivemall/languages","stargazers_url":"https://api.github.com/repos/takuti/incubator-hivemall/stargazers","contributors_url":"https://api.github.com/repos/takuti/incubator-hivemall/contributors","subscribers_url":"https://api.github.com/repos/takuti/incubator-hivemall/subscribers","subscription_url":"https://api.github.com/repos/takuti/incubator-hivemall/subscription","commits_url":"https://api.github.com/repos/takuti/incubator-hivemall/commits{/sha}","git_commits_url":"https://api.github.com/repos/takuti/incubator-hivemall/git/commits{/sha}","comments_url":"https://api.github.com/repos/takuti/incubator-hivemall/comments{/number}","issue_comment_url":"https://api.github.com/repos/takuti/incubator-hivemall/issues/comments{/number}","contents_url":"https://api.github.com/repos/takuti/incubator-hivemall/contents/{+path}","compare_url":"https://api.github.com/repos/takuti/incubator-hivemall/compare/{base}...{head}","merges_url":"https://api.github.com/repos/takuti/incubator-hivemall/merges","archive_url":"https://api.github.com/repos/takuti/incubator-hivemall/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/takuti/incubator-hivemall/downloads","issues_url":"https://api.github.com/repos/takuti/incubator-hivemall/issues{/number}","pulls_url":"https://api.github.com/repos/takuti/incubator-hivemall/pulls{/number}","milestones_url":"https://api.github.com/repos/takuti/incubator-hivemall/milestones{/number}","notifications_url":"https://api.github.com/repos/takuti/incubator-hivemall/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/takuti/incubator-hivemall/labels{/name}","releases_url":"https://api.github.com/repos/takuti/incubator-hivemall/releases{/id}","deployments_url":"https://api.github.com/repos/takuti/incubator-hivemall/deployments","created_at":"2016-12-09T04:51:32Z","updated_at":"2016-12-09T04:51:34Z","pushed_at":"2017-04-14T06:59:12Z","git_url":"git://github.com/takuti/incubator-hivemall.git","ssh_url":"git@github.com:takuti/incubator-hivemall.git","clone_url":"https://github.com/takuti/incubator-hivemall.git","svn_url":"https://github.com/takuti/incubator-hivemall","homepage":null,"size":8942,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"8aae974fc39cd16080acdf7e493152d7167aa9e7","user":{"login":"apache","id":47359,"avatar_url":"https://avatars3.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":68273151,"name":"incubator-hivemall","full_name":"apache/incubator-hivemall","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars3.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/incubator-hivemall","description":"Mirror of Apache Hivemall (incubating)","fork":false,"url":"https://api.github.com/repos/apache/incubator-hivemall","forks_url":"https://api.github.com/repos/apache/incubator-hivemall/forks","keys_url":"https://api.github.com/repos/apache/incubator-hivemall/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/incubator-hivemall/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/incubator-hivemall/teams","hooks_url":"https://api.github.com/repos/apache/incubator-hivemall/hooks","issue_events_url":"https://api.github.com/repos/apache/incubator-hivemall/issues/events{/number}","events_url":"https://api.github.com/repos/apache/incubator-hivemall/events","assignees_url":"https://api.github.com/repos/apache/incubator-hivemall/assignees{/user}","branches_url":"https://api.github.com/repos/apache/incubator-hivemall/branches{/branch}","tags_url":"https://api.github.com/repos/apache/incubator-hivemall/tags","blobs_url":"https://api.github.com/repos/apache/incubator-hivemall/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/incubator-hivemall/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/incubator-hivemall/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/incubator-hivemall/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/incubator-hivemall/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/incubator-hivemall/languages","stargazers_url":"https://api.github.com/repos/apache/incubator-hivemall/stargazers","contributors_url":"https://api.github.com/repos/apache/incubator-hivemall/contributors","subscribers_url":"https://api.github.com/repos/apache/incubator-hivemall/subscribers","subscription_url":"https://api.github.com/repos/apache/incubator-hivemall/subscription","commits_url":"https://api.github.com/repos/apache/incubator-hivemall/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/incubator-hivemall/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/incubator-hivemall/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/incubator-hivemall/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/incubator-hivemall/contents/{+path}","compare_url":"https://api.github.com/repos/apache/incubator-hivemall/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/incubator-hivemall/merges","archive_url":"https://api.github.com/repos/apache/incubator-hivemall/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/incubator-hivemall/downloads","issues_url":"https://api.github.com/repos/apache/incubator-hivemall/issues{/number}","pulls_url":"https://api.github.com/repos/apache/incubator-hivemall/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/incubator-hivemall/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/incubator-hivemall/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/incubator-hivemall/labels{/name}","releases_url":"https://api.github.com/repos/apache/incubator-hivemall/releases{/id}","deployments_url":"https://api.github.com/repos/apache/incubator-hivemall/deployments","created_at":"2016-09-15T07:00:08Z","updated_at":"2017-04-10T07:26:47Z","pushed_at":"2017-04-14T06:59:13Z","git_url":"git://github.com/apache/incubator-hivemall.git","ssh_url":"git@github.com:apache/incubator-hivemall.git","clone_url":"https://github.com/apache/incubator-hivemall.git","svn_url":"https://github.com/apache/incubator-hivemall","homepage":null,"size":8782,"stargazers_count":71,"watchers_count":71,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":16,"mirror_url":"git://git.apache.org/incubator-hivemall.git","open_issues_count":7,"forks":16,"open_issues":7,"watchers":71,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66"},"html":{"href":"https://github.com/apache/incubator-hivemall/pull/66"},"issue":{"href":"https://api.github.com/repos/apache/incubator-hivemall/issues/66"},"comments":{"href":"https://api.github.com/repos/apache/incubator-hivemall/issues/66/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/incubator-hivemall/pulls/66/commits"},"statuses":{"href":"https://api.github.com/repos/apache/incubator-hivemall/statuses/72edf7fc75e3dd2dcb54dc0f743518f79e8112b7"}}}}
{"actor":{"display_login":"myui"}}