Skip to content

Commit

Permalink
[SPARK-26198][SQL] Fix Metadata serialize null values throw NPE
Browse files Browse the repository at this point in the history
## 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 apache#23164 from wangyum/SPARK-26198.

Authored-by: Yuming Wang <yumwang@ebay.com>
Signed-off-by: Sean Owen <sean.owen@databricks.com>
  • Loading branch information
wangyum authored and srowen committed Dec 2, 2018
1 parent 9cda9a8 commit 676bbb2
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ object Metadata {
JBool(x)
case x: String =>
JString(x)
case null =>
JNull
case x: Metadata =>
toJsonValue(x.map)
case other =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class MetadataSuite extends SparkFunSuite {
assert(meta.## !== 0)
assert(meta.getString("key") === "value")
assert(meta.contains("key"))
assert(meta === Metadata.fromJson(meta.json))
intercept[NoSuchElementException](meta.getString("no_such_key"))
intercept[ClassCastException](meta.getBoolean("key"))
}
Expand All @@ -36,6 +37,7 @@ class MetadataSuite extends SparkFunSuite {
assert(meta.## !== 0)
assert(meta.getLong("key") === 12)
assert(meta.contains("key"))
assert(meta === Metadata.fromJson(meta.json))
intercept[NoSuchElementException](meta.getLong("no_such_key"))
intercept[ClassCastException](meta.getBoolean("key"))
}
Expand All @@ -46,6 +48,7 @@ class MetadataSuite extends SparkFunSuite {
assert(meta.## !== 0)
assert(meta.getDouble("key") === 12)
assert(meta.contains("key"))
assert(meta === Metadata.fromJson(meta.json))
intercept[NoSuchElementException](meta.getDouble("no_such_key"))
intercept[ClassCastException](meta.getBoolean("key"))
}
Expand All @@ -56,6 +59,7 @@ class MetadataSuite extends SparkFunSuite {
assert(meta.## !== 0)
assert(meta.getBoolean("key") === true)
assert(meta.contains("key"))
assert(meta === Metadata.fromJson(meta.json))
intercept[NoSuchElementException](meta.getBoolean("no_such_key"))
intercept[ClassCastException](meta.getString("key"))
}
Expand All @@ -69,6 +73,7 @@ class MetadataSuite extends SparkFunSuite {
assert(meta.getLong("key") === 0)
assert(meta.getBoolean("key") === false)
assert(meta.contains("key"))
assert(meta === Metadata.fromJson(meta.json))
intercept[NoSuchElementException](meta.getLong("no_such_key"))
}
}

0 comments on commit 676bbb2

Please sign in to comment.