热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spark:处理JSON数组字段中的空值

我正在加载以下JSON数据。假设这是来自Kafka的deserializedstring。{"message&#

我正在加载以下JSON数据。假设这是来自Kafka的deserialized string

{"message":{"title": {"titleid": "111","titlename": "AAA","titledesc": null},"customer": {"customerDetail": {"customerid": 1107879,"rates": [{"type": "Commission","amount": 0.0,"currency": null},{"type": "Total CV","currency": null}]}}}}
{"message":{"title": {"titleid": "222","titlename": "BBB","customer": {"customerDetail": {"customerid": 1107875,"currency": null}]}}}}
{"message":{"title": {"titleid": "333","titlename": "CCC","customer": {"customerDetail": {"customerid": 1107882,"currency": null}]}}}}
{"message":{"title": {"titleid": "444","titlename": "DDD","customer": {"customerDetail": {"customerid": 1107880,"currency": null}]}}}}
{"message":{"title": {"titleid": "555","titlename": "EEE","customer": {"customerDetail": {"customerid": 1107884,"currency": null}]}}}}
val ds = spark.read.textFile("./src/main/resources/json/JsonWithNull.txt").as[String]
ds.printSchema()
ds.show(false)
root
|-- value: string (nullable = true)
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|value |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|{"message":{"title": {"titleid": "111","currency": null}]}}}}|
|{"message":{"title": {"titleid": "222","currency": null}]}}}}|
|{"message":{"title": {"titleid": "333","currency": null}]}}}}|
|{"message":{"title": {"titleid": "444","currency": null}]}}}}|
|{"message":{"title": {"titleid": "555","currency": null}]}}}}|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

然后将Dataset [String]作为JSON加载,我看到schema字段内的curreny包括rates字段中的所有列。

val jsOnDF= spark.read.json(ds)
jsonDF.printSchema()
jsonDF.show(false)
root
|-- message: struct (nullable = true)
| |-- customer: struct (nullable = true)
| | |-- customerDetail: struct (nullable = true)
| | | |-- customerid: long (nullable = true)
| | | |-- rates: array (nullable = true)
| | | | |-- element: struct (cOntainsnull= true)
| | | | | |-- amount: double (nullable = true)
| | | | | |-- currency: string (nullable = true)
| | | | | |-- type: string (nullable = true)
| |-- title: struct (nullable = true)
| | |-- titledesc: string (nullable = true)
| | |-- titleid: string (nullable = true)
| | |-- titlename: string (nullable = true)
+-------------------------------------------------------------------+
|message |
+-------------------------------------------------------------------+
|[[[1107879,[[0.0,Commission],[0.0,Total CV]]]],[,111,AAA]]|
|[[[1107875,222,BBB]]|
|[[[1107882,333,CCC]]|
|[[[1107880,444,DDD]]|
|[[[1107884,555,EEE]]|
+-------------------------------------------------------------------+

但是当我使用rates array columnto_json function转换为JSON时,它完全忽略了currency字段,可能是因为其null

jsonDF.select(to_json(struct($"message.customer.customerDetail.rates")).as("Rates")).show(false)

输出:

+-------------------------------------------------------------------------------+
|Rates |
+-------------------------------------------------------------------------------+
|{"rates":[{"amount":0.0,"type":"Commission"},{"amount":0.0,"type":"Total CV"}]}|
|{"rates":[{"amount":0.0,"type":"Total CV"}]}|
+-------------------------------------------------------------------------------+

我该如何解决?





推荐阅读
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
author-avatar
天蝎丿冷傲丨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有