首页 > 解决方案 > 如何在 Spark JSON 中不跳过空值?

问题描述

我有一个我试图在模式中解析的 DF。但是,如果对象中的任何值为 null,则用于创建模式的类将跳过。

例子:

case class Parent(
                           Version: Int,
                           Info: InfoInstance
                           )

嵌套类如下:

case class InfoInstance(
                          FName: String ,
                          SName: String,
                          ID: Double,
                          ErrorCode: Int
                        )

因此,如果在 InfoInstance 中有任何机会,Fname 作为值是 null,它完全跳过键,并返回为

{ Sname: "abc", ID: 23123123, ErrorCode: 123 }

如果它为null,我希望它返回null。

    { FName: null, Sname: "abc", ID: 23123123, ErrorCode: 123 }

我在 spark 2.2 上,所以我不能使用 ignoreNullFields。我也尝试过使用 JSONInclude.Always,但即使这样也没有用。

标签: javascalaapache-sparkjackson

解决方案


好的,所以如果你有一个类属性,它的默认值为空。您可以将大多数 JSON 序列化程序设置为忽略或精确显示这些值,因为告诉您对象为空是多余的。如果你没有给它一个价值,当然它是。如果它不在 JSON 中,则在反序列化时它会在对象中获取它的默认值。出于同样的原因,智能序列化器不会打扰序列化为零的整数

我用谷歌搜索,似乎过去有人回答过这个问题

在 Spark 中编写 JSON 时保留具有空值的键

但是,再次将空值放入 JSON 是多余的,并且不会增加任何价值。


推荐阅读