scala - Scala spark 将数据框中的一组列聚合为 JSON 字符串
问题描述
给定一个数据框,
+-----------------------------+
| id| name| payable| strategy|
+-----------------------------+
| 0| Joe| 100| st-1|
| 1| Tom| 200| st-2|
| 2| John| 300| st-1|
+-----------------------------+
将每一行转换为 JSON 字符串的最有效方法是什么,如下所示,
{
"payload": {
"name": "Joe",
"payments": [
{
"strategy": "st-1",
"payable": 100
}
]
}
}
目前我有 UDF 来手动对提供的列进行字符串化,但我想知道是否有更好的方法来实现这一点。to_json方法是我迄今为止找到的最好的替代方法,但它只需要一列作为输入。
解决方案
usingto_json()
是正确的做法,但内容需要struct
酌情传递:
val df = Seq((0,"Joe",100,"st-1"), (1,"Tom",200,"st-2")).toDF("id","name","payable","strategy")
val result = df.select(
to_json(struct(
struct($"name",
array(struct($"strategy",$"payable")) as "payments"
) as "payload")
) as "jsonValue"
)
result.show(false)
+-------------------------------------------------------------------------+
|jsonValue |
+-------------------------------------------------------------------------+
|{"payload":{"name":"Joe","payments":[{"strategy":"st-1","payable":100}]}}|
|{"payload":{"name":"Tom","payments":[{"strategy":"st-2","payable":200}]}}|
+-------------------------------------------------------------------------+
推荐阅读
- filebeat - Filebeat - kakfka 输出“和”或“正则表达式”条件不起作用
- javascript - Fetch to Express 返回旧数据
- r - 如何将数据框作为参数传递给函数?
- jupyter - Jupyterlab 不显示一些在 jupyter notebook 中可见的单元格
- java - 是否可以从具有限制的 Json 对象中获取值
- java - 所有正则表达式都需要量词吗?
- docker - 如何在负载均衡器后面获取 kong 集群的指标
- linux - 在 Mac/Linux 上使用特定规则重命名文件和文件夹的递归 bash 脚本
- angular - 当 api 返回 404 时,Observable completed 没有被调用,当 api 失败时有任何替代解决方案吗?
- python - 我正在尝试在 colab 中使用 tkinter,问题就像基本的标记表生成一样我收到了这个错误