{"action":"created","comment":{"url":"https://api.github.com/repos/apache/spark/pulls/comments/32588684","id":32588684,"diff_hunk":"@@ -220,6 +222,404 @@ case class EndsWith(left: Expression, right: Expression)\n }\n \n /**\n+ * A function that trim the spaces from both ends for the specified string.\n+ */\n+case class StringTrim(child: Expression)\n+  extends UnaryExpression with String2StringExpression {\n+\n+  def convert(v: UTF8String): UTF8String = v.trim()\n+\n+  override def toString: String = s\"TRIM($child)\"\n+  override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = {\n+    defineCodeGen(ctx, ev, c => s\"($c).trim()\")\n+  }\n+}\n+\n+/**\n+ * A function that trim the spaces from left end for given string.\n+ */\n+case class StringTrimLeft(child: Expression)\n+  extends UnaryExpression with String2StringExpression {\n+\n+  def convert(v: UTF8String): UTF8String = v.trimLeft()\n+\n+  override def toString: String = s\"LTRIM($child)\"\n+  override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = {\n+    defineCodeGen(ctx, ev, c => s\"($c).trimLeft()\")\n+  }\n+}\n+\n+/**\n+ * A function that trim the spaces from right end for given string.\n+ */\n+case class StringTrimRight(child: Expression)\n+  extends UnaryExpression with String2StringExpression {\n+\n+  def convert(v: UTF8String): UTF8String = v.trimRight()\n+\n+  override def toString: String = s\"RTRIM($child)\"\n+  override def genCode(ctx: CodeGenContext, ev: GeneratedExpressionCode): String = {\n+    defineCodeGen(ctx, ev, c => s\"($c).trimRight()\")\n+  }\n+}\n+\n+/**\n+ * A function that Returns the position of the first occurrence of substr in the given string.\n+ * Returns null if either of the arguments are null and\n+ * returns 0 if substr could not be found in str.\n+ *\n+ * Be aware that this is not zero based. The first character in str has index 1\n+ */\n+case class StringInstr(str: Expression, substr: Expression)\n+  extends Expression with ExpectsInputTypes {\n+\n+  override def children: Seq[Expression] = str :: substr :: Nil\n+  override def foldable: Boolean = str.foldable && substr.foldable\n+  override def nullable: Boolean = str.nullable || substr.nullable\n+  override def dataType: DataType = IntegerType\n+  override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType)\n+\n+  override def eval(input: InternalRow): Any = {\n+    val l = str.eval(input)\n+    if (l == null) {\n+      null\n+    } else {\n+      val r = substr.eval(input)\n+      if (r == null) {\n+        null\n+      } else {\n+        l.asInstanceOf[UTF8String].instr(r.asInstanceOf[UTF8String], 0) + 1\n+      }\n+    }\n+  }\n+\n+  override def toString: String = s\"INSTR($str, $substr)\"\n+}\n+\n+/**\n+ * A function that returns the position of the first occurrence of substr\n+ * in given string after position pos.\n+ */\n+case class StringLocate(substr: Expression, str: Expression, start: Expression)\n+  extends Expression with ExpectsInputTypes {\n+\n+  def this(substr: Expression, str: Expression) = {\n+    this(substr, str, Literal(0))\n+  }\n+\n+  override def children: Seq[Expression] = substr :: str :: start :: Nil\n+  override def foldable: Boolean = children.forall(_.foldable)\n+  override def nullable: Boolean = substr.nullable || str.nullable\n+  override def dataType: DataType = IntegerType\n+  override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType, IntegerType)\n+\n+  override def eval(input: InternalRow): Any = {\n+    val s = start.eval(input)\n+    if (s == null) {\n+      // if the start position is null, we need to return 0, (keep it conform to Hive)\n+      0\n+    } else {\n+      val r = substr.eval(input)\n+      if (r == null) {\n+        null\n+      } else {\n+        val l = str.eval(input)\n+        if (l == null) {\n+          null\n+        } else {\n+          l.asInstanceOf[UTF8String].instr(\n+            r.asInstanceOf[UTF8String],\n+            s.asInstanceOf[Int]) + 1\n+        }\n+      }\n+    }\n+  }\n+\n+  override def toString: String = s\"LOCATE($substr, $str[, $start])\"\n+}\n+\n+/**\n+ * Returns str, left-padded with pad to a length of len\n+ */\n+case class StringLPad(str: Expression, len: Expression, pad: Expression)\n+  extends Expression with ExpectsInputTypes {\n+\n+  override def children: Seq[Expression] = str :: len :: pad :: Nil\n+  override def foldable: Boolean = children.forall(_.foldable)\n+  override def nullable: Boolean = children.exists(_.nullable)\n+  override def dataType: DataType = StringType\n+  override def expectedChildTypes: Seq[DataType] = Seq(StringType, IntegerType, StringType)\n+\n+  override def eval(input: InternalRow): Any = {\n+    val s = str.eval(input)\n+    if (s == null) {\n+      null\n+    } else {\n+      val l = len.eval(input)\n+      if (l == null) {\n+        null\n+      } else {\n+        val p = pad.eval(input)\n+        if (p == null) {\n+          null\n+        } else {\n+          val len = l.asInstanceOf[Int]\n+          val str = s.asInstanceOf[UTF8String]\n+          val pad = p.asInstanceOf[UTF8String]\n+          val bytes = new Array[Byte](len)\n+\n+          performOp(bytes, str.getBytes, pad.getBytes, len, str, pad)\n+        }\n+      }\n+    }\n+  }\n+\n+  // Copied from org.apache.hadoop.hive.ql.udf.generic.GenericUDFLpad\n+  // ('hi', 5, '??') => '???hi'\n+  // ('hi', 1, '??') => 'h'\n+  protected def performOp(\n+    data: Array[Byte],\n+    txt: Array[Byte],\n+    padTxt: Array[Byte],\n+    len: Int,\n+    str: UTF8String,\n+    pad: UTF8String): UTF8String = {\n+\n+    val pos: Int = Math.max(len - str.length, 0)\n+    // Copy the padding\n+    var i = 0\n+    while (i < pos) {\n+      var j = 0\n+      while (j < pad.length()) {\n+        data(i + j) = padTxt(j)\n+        j += 1\n+      }\n+      i += pad.length()\n+    }\n+\n+    // Copy the text\n+    i = 0\n+    while (pos + i < len && i < str.length()) {\n+      data(pos + i) = txt(i)\n+      i += 1\n+    }\n+\n+    UTF8String.fromBytes(data)\n+  }\n+\n+  override def toString: String = s\"LPAD($str, $len, $pad)\"\n+}\n+\n+/**\n+ * Returns str, right-padded with pad to a length of len.\n+ */\n+case class StringRPad(str: Expression, len: Expression, pad: Expression)\n+  extends Expression with ExpectsInputTypes {\n+\n+  override def children: Seq[Expression] = str :: len :: pad :: Nil\n+  override def foldable: Boolean = children.forall(_.foldable)\n+  override def nullable: Boolean = children.exists(_.nullable)\n+  override def dataType: DataType = StringType\n+  override def expectedChildTypes: Seq[DataType] = Seq(StringType, IntegerType, StringType)\n+\n+  override def eval(input: InternalRow): Any = {\n+    val s = str.eval(input)\n+    if (s == null) {\n+      null\n+    } else {\n+      val l = len.eval(input)\n+      if (l == null) {\n+        null\n+      } else {\n+        val p = pad.eval(input)\n+        if (p == null) {\n+          null\n+        } else {\n+          val len = l.asInstanceOf[Int]\n+          val str = s.asInstanceOf[UTF8String]\n+          val pad = p.asInstanceOf[UTF8String]\n+          val bytes = new Array[Byte](len)\n+\n+          performOp(bytes, str.getBytes, pad.getBytes, len, str, pad)\n+        }\n+      }\n+    }\n+  }\n+\n+  // Copied from org.apache.hadoop.hive.ql.udf.generic.GenericUDFRpad\n+  // ('hi', 5, '??') => 'hi???'\n+  // ('hi', 1, '??') => 'h'\n+  protected def performOp(\n+    data: Array[Byte],\n+    txt: Array[Byte],\n+    padTxt: Array[Byte],\n+    len: Int,\n+    str: UTF8String,\n+    pad: UTF8String): UTF8String = {\n+\n+    // Copy the text\n+    var pos = 0\n+    while (pos < str.length() && pos < len) {\n+      data(pos) = txt(pos)\n+      pos += 1\n+    }\n+\n+    // Copy the padding\n+    while (pos < len) {\n+      var i = 0\n+      while (i < pad.length() && i < len - pos) {\n+        data(pos + i) = padTxt(i)\n+        i += 1\n+      }\n+\n+      pos += pad.length()\n+    }\n+\n+    UTF8String.fromBytes(data)\n+  }\n+\n+  override def toString: String = s\"RPAD($str, $len, $pad)\"\n+}\n+\n+/**\n+ * Returns the input formatted according do printf-style format strings\n+ */\n+case class StringFormat(children: Expression*) extends Expression {\n+\n+  require(children.length >=1, \"printf() should take at least 1 argument\")\n+\n+  override def foldable: Boolean = children.forall(_.foldable)\n+  override def nullable: Boolean = children(0).nullable\n+  override def dataType: DataType = StringType\n+  private def format: Expression = children(0)\n+  private def args: Seq[Expression] = children.tail\n+\n+  override def eval(input: InternalRow): Any = {\n+    val pattern = format.eval(input)\n+    if (pattern == null) {\n+      null\n+    } else {\n+      val sb = new StringBuffer()\n+      val formatter = new java.util.Formatter(sb, Locale.US)\n+\n+      val arglist = args.map(_.eval(input).asInstanceOf[AnyRef])\n+      formatter.format(pattern.asInstanceOf[UTF8String].toString(), arglist: _*)\n+\n+      UTF8String.fromString(sb.toString)\n+    }\n+  }\n+\n+  override def toString: String = s\"printf($format, $args)\"\n+}\n+\n+/**\n+ * Returns the string which repeat the given string value n times.\n+ */\n+case class StringRepeat(str: Expression, times: Expression)\n+  extends Expression with ExpectsInputTypes {\n+\n+  override def children: Seq[Expression] = str :: times :: Nil\n+  override def foldable: Boolean = str.foldable && times.foldable\n+  override def nullable: Boolean = str.nullable || times.nullable\n+  override def dataType: DataType = StringType\n+  override def expectedChildTypes: Seq[DataType] = Seq(StringType, IntegerType)\n+\n+  override def eval(input: InternalRow): Any = {\n+    val s = str.eval(input)\n+    if (s == null) {\n+      null\n+    } else {\n+      val t = times.eval(input)\n+      if (t == null) {\n+        null\n+      } else {\n+        UTF8String.fromString(s.asInstanceOf[UTF8String].toString() * t.asInstanceOf[Integer])","path":"sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala","position":351,"original_position":351,"commit_id":"14be1f425f4e06567d2dd8fd723147d13af84469","original_commit_id":"14be1f425f4e06567d2dd8fd723147d13af84469","user":{"login":"cloud-fan","id":3182036,"avatar_url":"https://avatars.githubusercontent.com/u/3182036?v=3","gravatar_id":"","url":"https://api.github.com/users/cloud-fan","html_url":"https://github.com/cloud-fan","followers_url":"https://api.github.com/users/cloud-fan/followers","following_url":"https://api.github.com/users/cloud-fan/following{/other_user}","gists_url":"https://api.github.com/users/cloud-fan/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-fan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-fan/subscriptions","organizations_url":"https://api.github.com/users/cloud-fan/orgs","repos_url":"https://api.github.com/users/cloud-fan/repos","events_url":"https://api.github.com/users/cloud-fan/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-fan/received_events","type":"User","site_admin":false},"body":"Can we just repeat `UTF8String.bytes` n times and create a new `UTF8String` using new bytes? ","created_at":"2015-06-17T01:21:39Z","updated_at":"2015-06-17T01:21:39Z","html_url":"https://github.com/apache/spark/pull/6762#discussion_r32588684","pull_request_url":"https://api.github.com/repos/apache/spark/pulls/6762","_links":{"self":{"href":"https://api.github.com/repos/apache/spark/pulls/comments/32588684"},"html":{"href":"https://github.com/apache/spark/pull/6762#discussion_r32588684"},"pull_request":{"href":"https://api.github.com/repos/apache/spark/pulls/6762"}}},"pull_request":{"url":"https://api.github.com/repos/apache/spark/pulls/6762","id":37477322,"html_url":"https://github.com/apache/spark/pull/6762","diff_url":"https://github.com/apache/spark/pull/6762.diff","patch_url":"https://github.com/apache/spark/pull/6762.patch","issue_url":"https://api.github.com/repos/apache/spark/issues/6762","number":6762,"state":"open","locked":false,"title":"[SPARK-8247][SPARK-8249][SPARK-8252][SPARK-8254][SPARK-8257][SPARK-8258][SPARK-8259][SPARK-8261][SPARK-8262][SPARK-8253][SPARK-8260][SPARK-8267][SQL][WIP] Add String Expressions","user":{"login":"chenghao-intel","id":2367031,"avatar_url":"https://avatars.githubusercontent.com/u/2367031?v=3","gravatar_id":"","url":"https://api.github.com/users/chenghao-intel","html_url":"https://github.com/chenghao-intel","followers_url":"https://api.github.com/users/chenghao-intel/followers","following_url":"https://api.github.com/users/chenghao-intel/following{/other_user}","gists_url":"https://api.github.com/users/chenghao-intel/gists{/gist_id}","starred_url":"https://api.github.com/users/chenghao-intel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chenghao-intel/subscriptions","organizations_url":"https://api.github.com/users/chenghao-intel/orgs","repos_url":"https://api.github.com/users/chenghao-intel/repos","events_url":"https://api.github.com/users/chenghao-intel/events{/privacy}","received_events_url":"https://api.github.com/users/chenghao-intel/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-06-11T15:39:33Z","updated_at":"2015-06-17T01:21:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ca7e7bc47c21a7962d273afc50e98b60b42b0aec","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/spark/pulls/6762/commits","review_comments_url":"https://api.github.com/repos/apache/spark/pulls/6762/comments","review_comment_url":"https://api.github.com/repos/apache/spark/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/spark/issues/6762/comments","statuses_url":"https://api.github.com/repos/apache/spark/statuses/14be1f425f4e06567d2dd8fd723147d13af84469","head":{"label":"chenghao-intel:str_funcs","ref":"str_funcs","sha":"14be1f425f4e06567d2dd8fd723147d13af84469","user":{"login":"chenghao-intel","id":2367031,"avatar_url":"https://avatars.githubusercontent.com/u/2367031?v=3","gravatar_id":"","url":"https://api.github.com/users/chenghao-intel","html_url":"https://github.com/chenghao-intel","followers_url":"https://api.github.com/users/chenghao-intel/followers","following_url":"https://api.github.com/users/chenghao-intel/following{/other_user}","gists_url":"https://api.github.com/users/chenghao-intel/gists{/gist_id}","starred_url":"https://api.github.com/users/chenghao-intel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chenghao-intel/subscriptions","organizations_url":"https://api.github.com/users/chenghao-intel/orgs","repos_url":"https://api.github.com/users/chenghao-intel/repos","events_url":"https://api.github.com/users/chenghao-intel/events{/privacy}","received_events_url":"https://api.github.com/users/chenghao-intel/received_events","type":"User","site_admin":false},"repo":{"id":18098468,"name":"spark","full_name":"chenghao-intel/spark","owner":{"login":"chenghao-intel","id":2367031,"avatar_url":"https://avatars.githubusercontent.com/u/2367031?v=3","gravatar_id":"","url":"https://api.github.com/users/chenghao-intel","html_url":"https://github.com/chenghao-intel","followers_url":"https://api.github.com/users/chenghao-intel/followers","following_url":"https://api.github.com/users/chenghao-intel/following{/other_user}","gists_url":"https://api.github.com/users/chenghao-intel/gists{/gist_id}","starred_url":"https://api.github.com/users/chenghao-intel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chenghao-intel/subscriptions","organizations_url":"https://api.github.com/users/chenghao-intel/orgs","repos_url":"https://api.github.com/users/chenghao-intel/repos","events_url":"https://api.github.com/users/chenghao-intel/events{/privacy}","received_events_url":"https://api.github.com/users/chenghao-intel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/chenghao-intel/spark","description":"Mirror of Apache Spark","fork":true,"url":"https://api.github.com/repos/chenghao-intel/spark","forks_url":"https://api.github.com/repos/chenghao-intel/spark/forks","keys_url":"https://api.github.com/repos/chenghao-intel/spark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chenghao-intel/spark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chenghao-intel/spark/teams","hooks_url":"https://api.github.com/repos/chenghao-intel/spark/hooks","issue_events_url":"https://api.github.com/repos/chenghao-intel/spark/issues/events{/number}","events_url":"https://api.github.com/repos/chenghao-intel/spark/events","assignees_url":"https://api.github.com/repos/chenghao-intel/spark/assignees{/user}","branches_url":"https://api.github.com/repos/chenghao-intel/spark/branches{/branch}","tags_url":"https://api.github.com/repos/chenghao-intel/spark/tags","blobs_url":"https://api.github.com/repos/chenghao-intel/spark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chenghao-intel/spark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chenghao-intel/spark/git/refs{/sha}","trees_url":"https://api.github.com/repos/chenghao-intel/spark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chenghao-intel/spark/statuses/{sha}","languages_url":"https://api.github.com/repos/chenghao-intel/spark/languages","stargazers_url":"https://api.github.com/repos/chenghao-intel/spark/stargazers","contributors_url":"https://api.github.com/repos/chenghao-intel/spark/contributors","subscribers_url":"https://api.github.com/repos/chenghao-intel/spark/subscribers","subscription_url":"https://api.github.com/repos/chenghao-intel/spark/subscription","commits_url":"https://api.github.com/repos/chenghao-intel/spark/commits{/sha}","git_commits_url":"https://api.github.com/repos/chenghao-intel/spark/git/commits{/sha}","comments_url":"https://api.github.com/repos/chenghao-intel/spark/comments{/number}","issue_comment_url":"https://api.github.com/repos/chenghao-intel/spark/issues/comments{/number}","contents_url":"https://api.github.com/repos/chenghao-intel/spark/contents/{+path}","compare_url":"https://api.github.com/repos/chenghao-intel/spark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chenghao-intel/spark/merges","archive_url":"https://api.github.com/repos/chenghao-intel/spark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chenghao-intel/spark/downloads","issues_url":"https://api.github.com/repos/chenghao-intel/spark/issues{/number}","pulls_url":"https://api.github.com/repos/chenghao-intel/spark/pulls{/number}","milestones_url":"https://api.github.com/repos/chenghao-intel/spark/milestones{/number}","notifications_url":"https://api.github.com/repos/chenghao-intel/spark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chenghao-intel/spark/labels{/name}","releases_url":"https://api.github.com/repos/chenghao-intel/spark/releases{/id}","created_at":"2014-03-25T11:52:04Z","updated_at":"2015-03-05T08:13:37Z","pushed_at":"2015-06-16T15:14:19Z","git_url":"git://github.com/chenghao-intel/spark.git","ssh_url":"git@github.com:chenghao-intel/spark.git","clone_url":"https://github.com/chenghao-intel/spark.git","svn_url":"https://github.com/chenghao-intel/spark","homepage":null,"size":117608,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"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":"4c5889e8f5fd384a3a33e49d75a64cde95d2c9f3","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":17165658,"name":"spark","full_name":"apache/spark","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/spark","description":"Mirror of Apache Spark","fork":false,"url":"https://api.github.com/repos/apache/spark","forks_url":"https://api.github.com/repos/apache/spark/forks","keys_url":"https://api.github.com/repos/apache/spark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/spark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/spark/teams","hooks_url":"https://api.github.com/repos/apache/spark/hooks","issue_events_url":"https://api.github.com/repos/apache/spark/issues/events{/number}","events_url":"https://api.github.com/repos/apache/spark/events","assignees_url":"https://api.github.com/repos/apache/spark/assignees{/user}","branches_url":"https://api.github.com/repos/apache/spark/branches{/branch}","tags_url":"https://api.github.com/repos/apache/spark/tags","blobs_url":"https://api.github.com/repos/apache/spark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/spark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/spark/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/spark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/spark/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/spark/languages","stargazers_url":"https://api.github.com/repos/apache/spark/stargazers","contributors_url":"https://api.github.com/repos/apache/spark/contributors","subscribers_url":"https://api.github.com/repos/apache/spark/subscribers","subscription_url":"https://api.github.com/repos/apache/spark/subscription","commits_url":"https://api.github.com/repos/apache/spark/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/spark/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/spark/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/spark/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/spark/contents/{+path}","compare_url":"https://api.github.com/repos/apache/spark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/spark/merges","archive_url":"https://api.github.com/repos/apache/spark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/spark/downloads","issues_url":"https://api.github.com/repos/apache/spark/issues{/number}","pulls_url":"https://api.github.com/repos/apache/spark/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/spark/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/spark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/spark/labels{/name}","releases_url":"https://api.github.com/repos/apache/spark/releases{/id}","created_at":"2014-02-25T08:00:08Z","updated_at":"2015-06-16T18:52:32Z","pushed_at":"2015-06-17T01:13:48Z","git_url":"git://github.com/apache/spark.git","ssh_url":"git@github.com:apache/spark.git","clone_url":"https://github.com/apache/spark.git","svn_url":"https://github.com/apache/spark","homepage":null,"size":1457022,"stargazers_count":4390,"watchers_count":4390,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3859,"mirror_url":"git://git.apache.org/spark.git","open_issues_count":368,"forks":3859,"open_issues":368,"watchers":4390,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/spark/pulls/6762"},"html":{"href":"https://github.com/apache/spark/pull/6762"},"issue":{"href":"https://api.github.com/repos/apache/spark/issues/6762"},"comments":{"href":"https://api.github.com/repos/apache/spark/issues/6762/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/spark/pulls/6762/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/spark/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/spark/pulls/6762/commits"},"statuses":{"href":"https://api.github.com/repos/apache/spark/statuses/14be1f425f4e06567d2dd8fd723147d13af84469"}}}}