diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchema.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchema.scala index ae9f0571555e..03cc3cbdf790 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchema.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchema.scala @@ -17,6 +17,8 @@ package org.apache.spark.sql.catalyst.csv +import java.util.Locale + import scala.util.control.Exception.allCatch import org.apache.spark.rdd.RDD @@ -32,7 +34,10 @@ class CSVInferSchema(val options: CSVOptions) extends Serializable { options.zoneId, options.locale) - private val decimalParser = { + private val decimalParser = if (options.locale == Locale.US) { + // Special handling the default locale for backward compatibility + s: String => new java.math.BigDecimal(s) + } else { ExprUtils.getDecimalParser(options.locale) } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchemaSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchemaSuite.scala index c2b525ad1a9f..24d909ed99b9 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchemaSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/csv/CSVInferSchemaSuite.scala @@ -185,6 +185,8 @@ class CSVInferSchemaSuite extends SparkFunSuite with SQLHelper { assert(inferSchema.inferField(NullType, input) == expectedType) } - Seq("en-US", "ko-KR", "ru-RU", "de-DE").foreach(checkDecimalInfer(_, DecimalType(7, 0))) + // input like '1,0' is inferred as strings for backward compatibility. + Seq("en-US").foreach(checkDecimalInfer(_, StringType)) + Seq("ko-KR", "ru-RU", "de-DE").foreach(checkDecimalInfer(_, DecimalType(7, 0))) } } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala index 6584a30036fd..90deade2a51d 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala @@ -2052,4 +2052,11 @@ class CSVSuite extends QueryTest with SharedSQLContext with SQLTestUtils with Te checkAnswer(rows, expectedRows) } + + test("SPARK-27512: Decimal type inference should not handle ',' for backward compatibility") { + assert(spark.read + .option("delimiter", "|") + .option("inferSchema", "true") + .csv(Seq("1,2").toDS).schema.head.dataType === StringType) + } }