我有一个带有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文件。有人可以帮助我如何使用最后三个字段生成一个数组。
您的输出不是有效的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