将数据框数据集 转换为特定列的字符串数据类型的JSON格式,并将JSON字符串转换回数据框

问题描述 投票:0回答:1

我正在使用Spark Java读取数据集格式的消息。我需要调用Rest API方法(仅传递几个选定的列-PID,ACCOUNTNUM)。该方法期望数据集中出现的记录列表为JSON格式的字符串。然后,API将响应解密并以类似的JSON格式发送回去。例如如果一个数据帧中有3行或消息:

PID  |ACCOUNTNUM   |AMT|INDEX
----------------------------
x12a1|jkhjkhjk45454|30 |1
a67e6|7bhjbjh767667|450|2
c8978|fgj677676dfgd|650|3

我需要以下格式的formJSON应该看起来像:

[{"data":"REQUEST":[
        {"PID":"x12a1","ACCOUNTNUM":"jkhjkhjk45454"},
        {"PID":"a67e6","ACCOUNTNUM":"7bhjbjh767667"},
        {"PID":"c8978","ACCOUNTNUM":"fgj677676dfgd"}
    ]}]

API将解密PID和ACCOUNTNUM字段并将返回响应,例如

[{"data":"RESPONSE":[
        {"PID":"id111","ACCOUNTNUM":"12345"},
        {"PID":"id222","ACCOUNTNUM":"67891"},
        {"PID":"id333","ACCOUNTNUM":"23456"}
    ]}]

然后我需要将数据转换为所有4列的数据帧,以像下面这样加载到Hive表中:

PID  |ACCOUNTNUM|AMT|INDEX
----------------------------
id111|12345     |30 |1
id222|67891     |450|2
id333|23456     |650|3

[我想知道如何从一个数据帧中的消息(2列)创建一个json格式的字符串,然后将响应(json)转换回以创建原始结构数据帧(4列)。

请帮助。

谢谢

java json apache-spark apache-spark-sql apache-spark-dataset
1个回答
0
投票

对于上述情况,我假设数据集已经按Spark工作者的数量进行了划分,并且它是Row(数据帧)的通用数据集,那么可以采用以下机制。

  1. 将具有所需属性的类定义为数据容器
  2. 将数据集内容作为列表(如果为数据集,则为takeAsList方法,refer]
  3. 创建并填充数据容器的对象(并以以后识别它们的方式存储,您必须用解密的数据重新填充它们)
  4. 使用Jackson(refer)将列表序列化为JSON数组步骤4和5可以与Jackson自定义序列化程序refer example
  5. 结合使用
  6. 进行REST调用并重新填充数据容器对象(在用Jackson反序列化响应之后)
  7. 创建数据框(an example
  8. 处理数据框(行的数据集)

注意:您提供的JSON结构似乎不正确,JSON数组为[{},{},{}]

© www.soinside.com 2019 - 2024. All rights reserved.