java - 如何在 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,但即使这样也没有用。
解决方案
好的,所以如果你有一个类属性,它的默认值为空。您可以将大多数 JSON 序列化程序设置为忽略或精确显示这些值,因为告诉您对象为空是多余的。如果你没有给它一个价值,当然它是。如果它不在 JSON 中,则在反序列化时它会在对象中获取它的默认值。出于同样的原因,智能序列化器不会打扰序列化为零的整数
我用谷歌搜索,似乎过去有人回答过这个问题
但是,再次将空值放入 JSON 是多余的,并且不会增加任何价值。
推荐阅读
- python - 在pyqt5中使用多个窗口
- amazon-web-services - 更新 Amazon DynamoDB 中的项目字段而不覆盖其他字段
- java - 如何在 Jenkins 管道脚本中为字符串参数添加双引号
- python - 如何替换for循环以减少运行时间?
- pgadmin-4 - pgAdmin:查看/编辑数据和查询工具为空白
- python - youtube频道在python中上传视频时如何获得通知
- android - 是否可以从 Facebook 帖子启动 Android Instant 应用程序?
- laravel - 设置时更改密码
- kubernetes - AKS 升级仅允许用于次要版本序列升级?
- sql - 如何使用 BigQuery 将 date_diff 用于两个相邻的会话?