Skip to content

Commit 91b86b7

Browse files
wangyumsrowen
authored andcommitted
[SPARK-26198][SQL] Fix Metadata serialize null values throw NPE
## What changes were proposed in this pull request? How to reproduce this issue: ```scala scala> val meta = new org.apache.spark.sql.types.MetadataBuilder().putNull("key").build().json java.lang.NullPointerException at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$toJsonValue(Metadata.scala:196) at org.apache.spark.sql.types.Metadata$$anonfun$1.apply(Metadata.scala:180) ``` This pr fix `NullPointerException` when `Metadata` serialize `null` values. ## How was this patch tested? unit tests Closes #23164 from wangyum/SPARK-26198. Authored-by: Yuming Wang <yumwang@ebay.com> Signed-off-by: Sean Owen <sean.owen@databricks.com> (cherry picked from commit 676bbb2) Signed-off-by: Sean Owen <sean.owen@databricks.com>
1 parent 58a4c0c commit 91b86b7

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/types/Metadata.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ object Metadata {
190190
JBool(x)
191191
case x: String =>
192192
JString(x)
193+
case null =>
194+
JNull
193195
case x: Metadata =>
194196
toJsonValue(x.map)
195197
case other =>

sql/catalyst/src/test/scala/org/apache/spark/sql/types/MetadataSuite.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class MetadataSuite extends SparkFunSuite {
2626
assert(meta.## !== 0)
2727
assert(meta.getString("key") === "value")
2828
assert(meta.contains("key"))
29+
assert(meta === Metadata.fromJson(meta.json))
2930
intercept[NoSuchElementException](meta.getString("no_such_key"))
3031
intercept[ClassCastException](meta.getBoolean("key"))
3132
}
@@ -36,6 +37,7 @@ class MetadataSuite extends SparkFunSuite {
3637
assert(meta.## !== 0)
3738
assert(meta.getLong("key") === 12)
3839
assert(meta.contains("key"))
40+
assert(meta === Metadata.fromJson(meta.json))
3941
intercept[NoSuchElementException](meta.getLong("no_such_key"))
4042
intercept[ClassCastException](meta.getBoolean("key"))
4143
}
@@ -46,6 +48,7 @@ class MetadataSuite extends SparkFunSuite {
4648
assert(meta.## !== 0)
4749
assert(meta.getDouble("key") === 12)
4850
assert(meta.contains("key"))
51+
assert(meta === Metadata.fromJson(meta.json))
4952
intercept[NoSuchElementException](meta.getDouble("no_such_key"))
5053
intercept[ClassCastException](meta.getBoolean("key"))
5154
}
@@ -56,6 +59,7 @@ class MetadataSuite extends SparkFunSuite {
5659
assert(meta.## !== 0)
5760
assert(meta.getBoolean("key") === true)
5861
assert(meta.contains("key"))
62+
assert(meta === Metadata.fromJson(meta.json))
5963
intercept[NoSuchElementException](meta.getBoolean("no_such_key"))
6064
intercept[ClassCastException](meta.getString("key"))
6165
}
@@ -69,6 +73,7 @@ class MetadataSuite extends SparkFunSuite {
6973
assert(meta.getLong("key") === 0)
7074
assert(meta.getBoolean("key") === false)
7175
assert(meta.contains("key"))
76+
assert(meta === Metadata.fromJson(meta.json))
7277
intercept[NoSuchElementException](meta.getLong("no_such_key"))
7378
}
7479
}

0 commit comments

Comments
 (0)