diff --git a/connector/avro/src/main/scala/org/apache/spark/sql/avro/AvroDeserializer.scala b/connector/avro/src/main/scala/org/apache/spark/sql/avro/AvroDeserializer.scala index 877c3f89e88c0..2a18db6ca91f8 100644 --- a/connector/avro/src/main/scala/org/apache/spark/sql/avro/AvroDeserializer.scala +++ b/connector/avro/src/main/scala/org/apache/spark/sql/avro/AvroDeserializer.scala @@ -201,7 +201,7 @@ private[sql] class AvroDeserializer( updater.setFloat(ordinal, value.asInstanceOf[Float]) case (FLOAT, DoubleType) => (updater, ordinal, value) => - updater.setDouble(ordinal, value.asInstanceOf[Float]) + updater.setDouble(ordinal, value.asInstanceOf[Float].toString.toDouble) case (DOUBLE, DoubleType) => (updater, ordinal, value) => updater.setDouble(ordinal, value.asInstanceOf[Double]) diff --git a/connector/avro/src/test/scala/org/apache/spark/sql/avro/AvroSuite.scala b/connector/avro/src/test/scala/org/apache/spark/sql/avro/AvroSuite.scala index 976dcb440c6dc..dac8ebbd03a48 100644 --- a/connector/avro/src/test/scala/org/apache/spark/sql/avro/AvroSuite.scala +++ b/connector/avro/src/test/scala/org/apache/spark/sql/avro/AvroSuite.scala @@ -939,12 +939,17 @@ abstract class AvroSuite ) // Float -> Double - val floatPath = s"$tempPath/float_data1" - val floatDf = Seq(1, -1f, 2f).toDF("col") + val floatPath = s"$tempPath/float_data" + val floatDf = Seq(1.34F, + Float.MinValue, Float.MinPositiveValue, Float.MaxValue, + Float.NaN, Float.NegativeInfinity, Float.PositiveInfinity + ).toDF("col") floatDf.write.format("avro").save(floatPath) checkAnswer( spark.read.schema("col Double").format("avro").load(floatPath), - Seq(Row(1D), Row(-1D), Row(2D)) + Seq(Row(1.34D), + Row(-3.4028235E38D), Row(1.4E-45D), Row(3.4028235E38D), + Row(Double.NaN), Row(Double.NegativeInfinity), Row(Double.PositiveInfinity)) ) } }