scala - 如何将 Spark Dataframe 转换为 JSONObject

标签 scala apache-spark

我的目标是将 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/

相关文章:

linux - 在 Scala 脚本中自行修改类路径?

scala - 使用 mvn 构建 Spark 失败

python - 根据spark中的移动和将批号添加到DataFrame

algorithm - 使用 Apache Spark 对时间序列数据进行 K-Means

apache-spark - 从另一个应用程序以编程方式提交和终止 Spark 应用程序

apache-spark - 如何在 Spark SQL 查询的 Interval 中使用动态值

scala - 在scala中动态创建变量

java - scala模板 Play Framework 中的if语句

Scala:获取参数默认值:无法访问伴随对象内的 `apply$default$i`

scala - Spark 2.0并行JobProgressListener惨败