从火花数据框生成一个字段数组

时间:2016-12-16 16:15:59

标签: scala apache-spark dataframe spark-dataframe

我有一个包含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个字段的数组。

1 个答案:

答案 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