如何在 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 中不跳过空值?的主要内容,如果未能解决你的问题,请参考以下文章

index跳过空值提取整行数据

我怎样才能让这个 Map 双函数忽略/跳过空值?

angularjs ng重复svg跳过空值的索引

如何忽略错误但不跳过 redshift 复制命令中的行

ORACLE查询条件为空,则跳过该条件。

使 LEAST() 函数返回一个非空值