我有一个包含6列的火花数据帧,它产生如下所示的输出
c1 | c2 | c3 | c4 | c5 | c6
1 | 2 | 3 | 4 | 5 | 6
2 | 3 | 4 | 5 | 5 | 7
我需要将此转换为JSON文件,最后3列为单个数组,如下所示
{"c1":"1","c2":"2","c3" :"3",array["c4":"4","c5":"5","c6":"6"]}
{"c1":"2","c2":"3","c3" :"4",array["c4":"5","c5":"6","c6":"7"]}
我知道我们可以通过调用df.toJson
将数据帧转换为JSON文件。有人可以帮我如何生成最后3个字段的数组。
答案 0 :(得分:4)
您的输出不是有效的JSON。我假设你想要的输出是这样的:
{
"c1": "2",
"c2": "3",
"c3": "4",
"remaining": {
"c4": "5",
"c5": "6",
"c6": "7"
}
}
在这种情况下,您可以使用以下代码执行此操作:
import org.apache.spark.sql.functions._
val result = df.select($"c1", $"c2", $"c3", struct("c4", "c5", "c6").as("remaining")).toJSON
如果你真的想要一个数组,但没有键,比如:
{
"c1": "2",
"c2": "3",
"c3": "4",
"array": ["5", "6", "7"]
}
然后您可以尝试使用以下代码:
import org.apache.spark.sql.functions._
val result = df.select($"c1", $"c2", $"c3", array("c4", "c5", "c6").as("array")).toJSON