如何在 Spark JSON 中不跳过空值?
Posted
技术标签:
【中文标题】如何在 Spark JSON 中不跳过空值?【英文标题】:How to NOT SKIP null values in spark JSON? 【发布时间】:2020-12-03 21:20:56 【问题描述】:我有一个我试图在模式中解析的 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,但即使这样也没有用。
【问题讨论】:
【参考方案1】:好的,所以如果你有一个类属性,它的默认值为空。您可以将大多数 JSON 序列化程序设置为忽略或精确显示这些值,因为告诉您对象为空是多余的。如果你没有给它一个价值,当然它是。如果它不在 JSON 中,则在反序列化时它会在对象中获取它的默认值。出于同样的原因,智能序列化器不会打扰序列化为零的整数
我用谷歌搜索过,似乎有人在过去回答过这个问题
Retain keys with null values while writing JSON in spark
尽管在 JSON 中添加空值是多余的,并且不会增加任何价值。
【讨论】:
感谢您的回复。我已经看到了那个答案,但它与我的场景不匹配,因为我正在映射到现有架构。 但是即使它不在您的 JSON 中,该值也是 null。默认为空。如果你想在那里看到它们,我链接到一个代码解决方案来添加空值......以上是关于如何在 Spark JSON 中不跳过空值?的主要内容,如果未能解决你的问题,请参考以下文章