我的目标是将 DataFrame 转换为 JSONObject 的有效 JSONArray。
我目前正在使用:
val res = df.toJSON.collect()
但我得到一个 Array[String] - JSON 转义字符串数组,即:
["{\"url\":\"http://www.w3schools.com/html/html_form_action.asp?user=123\",\"subnet\":\"32.2.208.1\",\"country\":\"\",\"status_code\":\"200\"}"]
我正在寻找一种将这些字符串转换为实际 JSONObject 的方法,我找到了一些建议给 find and replace characters 的解决方案,但我正在寻找更清洁的东西。
我尝试使用 org.json 库将每个字符串转换为 JSONObject,但显然它不是可序列化对象。
有什么建议吗?任何可以工作的快速 Scala JSON 库?
或者通常建议如何使用 toJSON 方法。
更新
这有点浪费,但这个选项对我有用:
val res = df.toJSON.map(new JSONObject(_).toString).collect()
由于 JSONObject 不可序列化 - 我可以使用它的 toString 来获取有效的 JSON 格式。
如果您对我如何改进它还有任何建议 - 请告诉我。
最佳答案
你可以使用 spray-json将字符串解析为案例类:
import spray.json._
import DefaultJsonProtocol._
case class Data(url: String, subnet: String, country: String, status_code: String)
implicit val dataFormat = jsonFormat4(Data)
val source = Array("{\"url\":\"http://www.w3schools.com/html/html_form_action.asp?user=123\",\"subnet\":\"32.2.208.1\",\"country\":\"\",\"status_code\":\"200\"}")
val data = source(0).parseJson.convertTo[Data]
关于scala - 如何将 Spark Dataframe 转换为 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302061/