首页 > 解决方案 > 将 Dataframe 转换为 Json 数组

问题描述

我以下列方式创建了一个火花数据框:

+----+-------+
| age| number|
+----+-------+
|  16|     12|
|  16|     13|
|  16|     14|
|  17|     15|
|  17|     16|
|  17|     17|
+----+-------+

我想将其转换为以下 json 格式:

[{ 
 'age' : 16,  
 'name' : [12,13,14] 
 },{ 
 'age' : 17,  
 'name' : [15,16,17] 
 }]

我怎样才能达到同样的效果?

标签: apache-sparkdataframe

解决方案


你可以试试 to_json 函数。像这样的东西。

import spark.implicits._

val list = List((16,12), (16,13), (16,14), (17,15), (17,16), (17,17))
val df = spark.parallelize(list).toDF("age", "number")

val jsondf = df.groupBy($"age").agg(collect_list($"number").as("name"))
    .withColumn("json", to_json(struct($"age", $"name")))
    .drop("age", "name")
    .agg(collect_list($"json").as("json"))

结果如下。我希望它有所帮助。

+------------------------------------------------------------+ |json | +------------------------------------------------------------+ |[{"age":16,"name":[12,13,14]}, {"age":17,"name":[15,16,17]}]| +------------------------------------------------------------+


推荐阅读