У меня есть сценарий использования, где схемой столбца является String, но на самом деле это json (например, "" "{" a ":" b "}" ""). Например:
scala> val list = List("a" -> """ {"a":"b","c":"d"} """, "b" -> """ {"foo" : "bar"} """)
list: List[(String, String)] = List((a," {"a":"b","c":"d"} "), (b," {"foo" : "bar"} "))
scala> val df = list.toDF("colA","colB")
df: org.apache.spark.sql.DataFrame = [colA: string, colB: string]
scala> df.show(2,false)
+----+-------------------+
|colA|colB |
+----+-------------------+
|a | {"a":"b","c":"d"} |
|b | {"foo" : "bar"} |
+----+-------------------+
Мне нужно написать df как json, но для colB мне нужно вывести истинный json, а не String. Например, если я сделаю это:
scala> df.repartition(1).write.json("/Users/myuser/sparkjson/3")
Я получаю в json-файл colB как String:
{"colA":"a","colB":" {\"a\":\"b\",\"c\":\"d\"} "}
{"colA":"b","colB":" {\"foo\":\"bar\"} "}
Но я хочу вывести true json для colB (вместо строки). Так что-то вроде:
{"colA":"a","colB": {"a":"b","c":"d"} }
{"colA":"b","colB": {"foo":"bar"} }
К сожалению, у меня нет схемы для colB, это может быть любой действительный json. Как мне этого добиться?