Я получил помощь от предыдущего поста . Если бы вы посмотрели здесь, я думаю, вы бы получили свой ответ.
Вы правы на полпути. Добавив пользовательский код форматирования, вы сможете получить выходные данные в нужном формате.
import scala.util.parsing.json.JSON
import scala.util.parsing.json.JSONArray
import scala.util.parsing.json.JSONFormat
import scala.util.parsing.json.JSONObject
import scala.util.parsing.json.JSONType
// Thanks to Senia for providing this in her solution
def format(t: Any, i: Int = 0): String = t match {
case o: JSONObject =>
o.obj.map{ case (k, v) =>
" "*(i+1) + JSONFormat.defaultFormatter(k) + ": " + format(v, i+1)
}.mkString("{\n", ",\n", "\n" + " "*i + "}")
case a: JSONArray =>
a.list.map{
e => " "*(i+1) + format(e, i+1)
}.mkString("[\n", ",\n", "\n" + " "*i + "]")
case _ => JSONFormat defaultFormatter t
}
val list = sc.parallelize(List(("a1","b1","c1","d1"),("a2","b2","c2","d2"))).toDF
// Create array
val jsonArray = list.toJSON.collect()
val jsonFormattedArray = jsonArray.map(j => format(JSON.parseRaw(j).get))
res1: Array[String] =
Array({
"_1": "a1",
"_2": "b1",
"_3": "c1",
"_4": "d1"
}, {
"_1": "a2",
"_2": "b2",
"_3": "c2",
"_4": "d2"
})
Преобразование отформатированного Json в строку
scala> jsonFormattedArray.toList.mkString(",")
res2: String =
{
"_1": "a1",
"_2": "b1",
"_3": "c1",
"_4": "d1"
},{
"_1": "a2",
"_2": "b2",
"_3": "c2",
"_4": "d2"
}