You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Tarique Anwer (Jira)" <ji...@apache.org> on 2025/04/29 07:21:00 UTC
[jira] [Created] (SPARK-51945) Precision Increase from Decimal(28,20) to Decimal(29,20) When Rounding to 20 Decimal Places in Spark 3.5
Tarique Anwer created SPARK-51945:
-------------------------------------
Summary: Precision Increase from Decimal(28,20) to Decimal(29,20) When Rounding to 20 Decimal Places in Spark 3.5
Key: SPARK-51945
URL: https://issues.apache.org/jira/browse/SPARK-51945
Project: Spark
Issue Type: Bug
Components: PySpark
Affects Versions: 3.5.0
Reporter: Tarique Anwer
In Apache Spark 3.5 (and Databricks Runtime 15.4 LTS), the round function increases the precision of a Decimal(28,20) column to Decimal(29,20) when rounding to 20 decimal places. This behavior differs from Spark 3.2 (Databricks Runtime 10.4 LTS), where the output remains Decimal(28,20). The precision increase appears unnecessary and potentially a bug, as a Decimal(28,20) column cannot have a 21st decimal digit to trigger a carry-over requiring extra precision (e.g., 99999999.99999999999999999999 → 100000000.00000000000000000000).
*Steps to Reproduce*
* Create a DataFrame with Decimal(28,20) values, e.g., 99999999.9 to 99999999.99999999999999999999 (scales 1 to 20).
* Apply round(col, 20) to the column.
* Check the output schema and values.
{*}Example Code{*}:
{code:java}
from pyspark.sql.functions import *
from pyspark.sql.types import DecimalType, IntegerType, StructType, StructField
from decimal import Decimal
schema = StructType( [ StructField("input", DecimalType(28, 20), True), StructField("scale", IntegerType(), True), ])
df = spark.createDataFrame( [ (Decimal("99999999.9"), 1), (Decimal("99999999.99999999999999999990"), 20), (Decimal("99999999.99999999999999999994"), 20), (Decimal("99999999.99999999999999999995"), 20), (Decimal("99999999.99999999999999999996"), 20), (Decimal("99999999.99999999999999999999"), 20), ], schema,)
df.printSchema()
root
|-- input: decimal(28,20) (nullable = true)
|-- scale: integer (nullable = true)
df_1 = df.select(round(col("input"), 20).alias("input"))
df_1.printSchema()
root
|-- input: decimal(29,20) (nullable = true)
df_2 = df.withColumn("input", round(col("input"), 20))
df_2.printSchema()
root
|-- input: decimal(29,20) (nullable = true)
|-- scale: integer (nullable = true){code}
I'm not entirely sure, but is this possibly related to https://issues.apache.org/jira/browse/SPARK-39226??
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org