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 2022/11/08 01:33:32 UTC
[spark] branch master updated: [SPARK-41007][SQL] Add missing serializer for java.math.BigInteger
This is an automated email from the ASF dual-hosted git repository.
srowen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 0087a2a19dd [SPARK-41007][SQL] Add missing serializer for java.math.BigInteger
0087a2a19dd is described below
commit 0087a2a19dd081b524e96d6a407d3940cab1f2c0
Author: Daniel Fiterman <fi...@amazon.com>
AuthorDate: Mon Nov 7 19:33:21 2022 -0600
[SPARK-41007][SQL] Add missing serializer for java.math.BigInteger
### What changes were proposed in this pull request?
The JavaTypeInference class used by the [Bean Encoder](https://spark.apache.org/docs/3.2.0/api/java/org/apache/spark/sql/Encoders.html#bean-java.lang.Class-) to create
serialize/deserialize a Java Bean was missing a case statement to serialize java.math.BigInteger. This adds the missing case statement.
### Why are the changes needed?
This fixes the bug mentioned in the description
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
- Unit Test
- Manually tested creating a new dataset with a Java Bean containing a java.math.BigInteger field
Closes #38500 from dfit99/SPARK-41007.
Authored-by: Daniel Fiterman <fi...@amazon.com>
Signed-off-by: Sean Owen <sr...@gmail.com>
---
.../spark/sql/catalyst/JavaTypeInference.scala | 3 ++
.../sql/catalyst/JavaTypeInferenceSuite.scala | 42 ++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
index 903072ae29d..dccaf1c4835 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
@@ -424,6 +424,9 @@ object JavaTypeInference {
case c if c == classOf[java.time.Period] => createSerializerForJavaPeriod(inputObject)
+ case c if c == classOf[java.math.BigInteger] =>
+ createSerializerForJavaBigInteger(inputObject)
+
case c if c == classOf[java.math.BigDecimal] =>
createSerializerForJavaBigDecimal(inputObject)
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/JavaTypeInferenceSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/JavaTypeInferenceSuite.scala
new file mode 100644
index 00000000000..9c1d0c17777
--- /dev/null
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/JavaTypeInferenceSuite.scala
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.spark.sql.catalyst
+
+import java.math.BigInteger
+
+import scala.beans.BeanProperty
+
+import org.apache.spark.SparkFunSuite
+import org.apache.spark.sql.catalyst.expressions.{CheckOverflow, Expression, Literal}
+import org.apache.spark.sql.types.DecimalType
+
+class DummyBean() {
+ @BeanProperty var bigInteger = null: BigInteger
+}
+
+class JavaTypeInferenceSuite extends SparkFunSuite {
+
+ test("SPARK-41007: JavaTypeInference returns the correct serializer for BigInteger") {
+ var serializer = JavaTypeInference.serializerFor(classOf[DummyBean])
+ var bigIntegerFieldName: Expression = serializer.children(0)
+ assert(bigIntegerFieldName.asInstanceOf[Literal].value.toString == "bigInteger")
+ var bigIntegerFieldExpression: Expression = serializer.children(1)
+ assert(bigIntegerFieldExpression.asInstanceOf[CheckOverflow].dataType ==
+ DecimalType.BigIntDecimal)
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org