首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala spark将数据帧中的一组列聚合为JSON字符串

Scala spark将数据帧中的一组列聚合为JSON字符串
EN

Stack Overflow用户
提问于 2020-02-20 15:58:09
回答 1查看 68关注 0票数 0

给定一个数据帧,

代码语言:javascript
复制
+-----------------------------+
| id|  name| payable| strategy|
+-----------------------------+
|  0|   Joe|     100|     st-1|
|  1|   Tom|     200|     st-2|
|  2|  John|     300|     st-1|
+-----------------------------+

将每行转换为JSON字符串的最有效方法是什么,如下所示:

代码语言:javascript
复制
{
  "payload": {
     "name": "Joe",
     "payments": [
         {
            "strategy": "st-1",
            "payable": 100
         }
     ]
  }
}

目前,我使用UDF来手动对提供的列进行字符串化,但我想知道是否有更好的方法来实现这一点。到目前为止,to_json方法是我找到的最好的替代方法,但它只接受一列作为输入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-20 17:59:55

使用to_json()是正确的方法,但内容需要适当地作为struct传递:

代码语言:javascript
复制
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}]}}|
+-------------------------------------------------------------------------+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60315234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档