将Spark数据集转换为JSON

时间:2018-07-27 02:52:59

标签: json apache-spark

我正在尝试将Spark数据集转换为JSON。我尝试了.toJSON()方法,但没有太大帮助。

我有一个看起来像这样的数据集

|          ord_status|count|
+--------------------+-----+
|             Fallout| 3374|
|         Flowthrough|12083|
|         In-Progress| 3804|

我正在尝试将其转换为这样的JSON:

"overallCounts": {

        "flowthrough": 2148,
        "fallout": 4233,
        "inprogress": 1300
    }

我的问题是,有什么方法可以并排解析列值并将其显示为JSON。

更新:通过将给定的json格式的数据集转换为列表,然后解析每个值并将其放入字符串,我将其转换为json。尽管这需要大量的人工工作。是否有任何内置方法可以将数据集转换为这种json格式?

1 个答案:

答案 0 :(得分:0)

请找到以下解决方案。数据集必须使用mapPartitions进行迭代,然后生成仅包含JSON元素的最终字符串。

val list = List(("Fallout",3374), ("Flowthrough", 12083), ("In-Progress", 3804))
val ds = list.toDS()

ds.show
val rows = ds.mapPartitions(itr => {
      val string =
        s"""
          |"%s" : %d
          |""".stripMargin
      val pairs = itr.map(ele => string.format(ele._1, ele._2)).mkString
      Iterator(pairs)
    })

val text = rows.collect().mkString

val finalJson = """
        |"overallCounts": {
        |        %s
        |    }
        |""".stripMargin

println(finalJson.format(text))