You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by sr...@apache.org on 2016/03/02 16:57:30 UTC
spark git commit: [SPARK-13515] Make FormatNumber work irrespective
of locale.
Repository: spark
Updated Branches:
refs/heads/master 75e618def -> d8afd45f8
[SPARK-13515] Make FormatNumber work irrespective of locale.
## What changes were proposed in this pull request?
Change in class FormatNumber to make it work irrespective of locale.
## How was this patch tested?
Unit tests.
Author: lgieron <lg...@gmail.com>
Closes #11396 from lgieron/SPARK-13515_Fix_Format_Number.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/d8afd45f
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/d8afd45f
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/d8afd45f
Branch: refs/heads/master
Commit: d8afd45f8949e0914ce4bd56d832b1158e3c9220
Parents: 75e618d
Author: lgieron <lg...@gmail.com>
Authored: Wed Mar 2 15:57:27 2016 +0000
Committer: Sean Owen <so...@cloudera.com>
Committed: Wed Mar 2 15:57:27 2016 +0000
----------------------------------------------------------------------
.../expressions/stringExpressions.scala | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/d8afd45f/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
index 4be065b..3ee19cc 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
@@ -17,7 +17,7 @@
package org.apache.spark.sql.catalyst.expressions
-import java.text.DecimalFormat
+import java.text.{DecimalFormat, DecimalFormatSymbols}
import java.util.{HashMap, Locale, Map => JMap}
import org.apache.spark.sql.catalyst.InternalRow
@@ -938,8 +938,10 @@ case class FormatNumber(x: Expression, d: Expression)
@transient
private val pattern: StringBuffer = new StringBuffer()
+ // SPARK-13515: US Locale configures the DecimalFormat object to use a dot ('.')
+ // as a decimal separator.
@transient
- private val numberFormat: DecimalFormat = new DecimalFormat("")
+ private val numberFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US))
override protected def nullSafeEval(xObject: Any, dObject: Any): Any = {
val dValue = dObject.asInstanceOf[Int]
@@ -962,10 +964,9 @@ case class FormatNumber(x: Expression, d: Expression)
pattern.append("0")
}
}
- val dFormat = new DecimalFormat(pattern.toString)
lastDValue = dValue
- numberFormat.applyPattern(dFormat.toPattern)
+ numberFormat.applyLocalizedPattern(pattern.toString)
}
x.dataType match {
@@ -992,6 +993,11 @@ case class FormatNumber(x: Expression, d: Expression)
val sb = classOf[StringBuffer].getName
val df = classOf[DecimalFormat].getName
+ val dfs = classOf[DecimalFormatSymbols].getName
+ val l = classOf[Locale].getName
+ // SPARK-13515: US Locale configures the DecimalFormat object to use a dot ('.')
+ // as a decimal separator.
+ val usLocale = "US"
val lastDValue = ctx.freshName("lastDValue")
val pattern = ctx.freshName("pattern")
val numberFormat = ctx.freshName("numberFormat")
@@ -999,7 +1005,8 @@ case class FormatNumber(x: Expression, d: Expression)
val dFormat = ctx.freshName("dFormat")
ctx.addMutableState("int", lastDValue, s"$lastDValue = -100;")
ctx.addMutableState(sb, pattern, s"$pattern = new $sb();")
- ctx.addMutableState(df, numberFormat, s"""$numberFormat = new $df("");""")
+ ctx.addMutableState(df, numberFormat,
+ s"""$numberFormat = new $df("", new $dfs($l.$usLocale));""")
s"""
if ($d >= 0) {
@@ -1013,9 +1020,8 @@ case class FormatNumber(x: Expression, d: Expression)
$pattern.append("0");
}
}
- $df $dFormat = new $df($pattern.toString());
$lastDValue = $d;
- $numberFormat.applyPattern($dFormat.toPattern());
+ $numberFormat.applyLocalizedPattern($pattern.toString());
}
${ev.value} = UTF8String.fromString($numberFormat.format(${typeHelper(num)}));
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org