给定一个数据帧,
+-----------------------------+
| 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方法是我找到的最好的替代方法,但它只接受一列作为输入。
发布于 2020-02-20 17:59:55
使用to_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}]}}|
+-------------------------------------------------------------------------+https://stackoverflow.com/questions/60315234
复制相似问题