aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReynold Xin <rxin@databricks.com>2015-07-21 19:14:07 -0700
committerReynold Xin <rxin@databricks.com>2015-07-21 19:14:07 -0700
commita4c83cb1e4b066cd60264b6572fd3e51d160d26a (patch)
treea46c6f6b373d70957f7a518eea287b1bb967a4ac
parentd4c7a7a3642a74ad40093c96c4bf45a62a470605 (diff)
downloadspark-a4c83cb1e4b066cd60264b6572fd3e51d160d26a.tar.gz
spark-a4c83cb1e4b066cd60264b6572fd3e51d160d26a.tar.bz2
spark-a4c83cb1e4b066cd60264b6572fd3e51d160d26a.zip
[SPARK-9154][SQL] Rename formatString to format_string.
Also make format_string the canonical form, rather than printf. Author: Reynold Xin <rxin@databricks.com> Closes #7579 from rxin/format_strings and squashes the following commits: 53ee54f [Reynold Xin] Fixed unit tests. 52357e1 [Reynold Xin] Add format_string alias. b40a42a [Reynold Xin] [SPARK-9154][SQL] Rename formatString to format_string.
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala3
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala13
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala14
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/functions.scala18
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala12
5 files changed, 18 insertions, 42 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala
index e3d8d2adf2..9c349838c2 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala
@@ -168,7 +168,8 @@ object FunctionRegistry {
expression[StringLocate]("locate"),
expression[StringLPad]("lpad"),
expression[StringTrimLeft]("ltrim"),
- expression[StringFormat]("printf"),
+ expression[FormatString]("format_string"),
+ expression[FormatString]("printf"),
expression[StringRPad]("rpad"),
expression[StringRepeat]("repeat"),
expression[StringReverse]("reverse"),
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
index 1f18a6e9ff..cf187ad5a0 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringOperations.scala
@@ -526,29 +526,26 @@ case class StringRPad(str: Expression, len: Expression, pad: Expression)
/**
* Returns the input formatted according do printf-style format strings
*/
-case class StringFormat(children: Expression*) extends Expression with ImplicitCastInputTypes {
+case class FormatString(children: Expression*) extends Expression with ImplicitCastInputTypes {
- require(children.nonEmpty, "printf() should take at least 1 argument")
+ require(children.nonEmpty, "format_string() should take at least 1 argument")
override def foldable: Boolean = children.forall(_.foldable)
override def nullable: Boolean = children(0).nullable
override def dataType: DataType = StringType
- private def format: Expression = children(0)
- private def args: Seq[Expression] = children.tail
override def inputTypes: Seq[AbstractDataType] =
StringType :: List.fill(children.size - 1)(AnyDataType)
-
override def eval(input: InternalRow): Any = {
- val pattern = format.eval(input)
+ val pattern = children(0).eval(input)
if (pattern == null) {
null
} else {
val sb = new StringBuffer()
val formatter = new java.util.Formatter(sb, Locale.US)
- val arglist = args.map(_.eval(input).asInstanceOf[AnyRef])
+ val arglist = children.tail.map(_.eval(input).asInstanceOf[AnyRef])
formatter.format(pattern.asInstanceOf[UTF8String].toString, arglist: _*)
UTF8String.fromString(sb.toString)
@@ -591,7 +588,7 @@ case class StringFormat(children: Expression*) extends Expression with ImplicitC
"""
}
- override def prettyName: String = "printf"
+ override def prettyName: String = "format_string"
}
/**
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
index 3c2d88731b..3d294fda5d 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala
@@ -351,16 +351,16 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper {
}
test("FORMAT") {
- checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
- checkEvaluation(StringFormat(Literal("aa")), "aa", create_row(null))
- checkEvaluation(StringFormat(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
- checkEvaluation(StringFormat(Literal("aa%d%s"), 12, "cc"), "aa12cc")
+ checkEvaluation(FormatString(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
+ checkEvaluation(FormatString(Literal("aa")), "aa", create_row(null))
+ checkEvaluation(FormatString(Literal("aa%d%s"), Literal(123), Literal("a")), "aa123a")
+ checkEvaluation(FormatString(Literal("aa%d%s"), 12, "cc"), "aa12cc")
- checkEvaluation(StringFormat(Literal.create(null, StringType), 12, "cc"), null)
+ checkEvaluation(FormatString(Literal.create(null, StringType), 12, "cc"), null)
checkEvaluation(
- StringFormat(Literal("aa%d%s"), Literal.create(null, IntegerType), "cc"), "aanullcc")
+ FormatString(Literal("aa%d%s"), Literal.create(null, IntegerType), "cc"), "aanullcc")
checkEvaluation(
- StringFormat(Literal("aa%d%s"), 12, Literal.create(null, StringType)), "aa12null")
+ FormatString(Literal("aa%d%s"), 12, Literal.create(null, StringType)), "aa12null")
}
test("INSTR") {
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
index e5ff8ae7e3..28159cbd5a 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
@@ -1742,26 +1742,14 @@ object functions {
def rtrim(e: Column): Column = StringTrimRight(e.expr)
/**
- * Format strings in printf-style.
+ * Formats the arguments in printf-style and returns the result as a string column.
*
* @group string_funcs
* @since 1.5.0
*/
@scala.annotation.varargs
- def formatString(format: Column, arguments: Column*): Column = {
- StringFormat((format +: arguments).map(_.expr): _*)
- }
-
- /**
- * Format strings in printf-style.
- * NOTE: `format` is the string value of the formatter, not column name.
- *
- * @group string_funcs
- * @since 1.5.0
- */
- @scala.annotation.varargs
- def formatString(format: String, arguNames: String*): Column = {
- StringFormat(lit(format).expr +: arguNames.map(Column(_).expr): _*)
+ def format_string(format: String, arguments: Column*): Column = {
+ FormatString((lit(format) +: arguments).map(_.expr): _*)
}
/**
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
index 3702e73b4e..0f9c986f64 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala
@@ -126,22 +126,12 @@ class StringFunctionsSuite extends QueryTest {
val df = Seq(("aa%d%s", 123, "cc")).toDF("a", "b", "c")
checkAnswer(
- df.select(formatString("aa%d%s", "b", "c")),
+ df.select(format_string("aa%d%s", $"b", $"c")),
Row("aa123cc"))
checkAnswer(
df.selectExpr("printf(a, b, c)"),
Row("aa123cc"))
-
- val df2 = Seq(("aa%d%s".getBytes, 123, "cc")).toDF("a", "b", "c")
-
- checkAnswer(
- df2.select(formatString($"a", $"b", $"c"), formatString("aa%d%s", "b", "c")),
- Row("aa123cc", "aa123cc"))
-
- checkAnswer(
- df2.selectExpr("printf(a, b, c)"),
- Row("aa123cc"))
}
test("string instr function") {