【发布时间】:2017-12-31 07:21:59
【问题描述】:
我的目标是将 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\"}"]
我正在寻找一种将这些字符串转换为实际 JSONObjects 的方法,我找到了一些建议 find and replace characters 的解决方案,但我正在寻找更清洁的东西。
我尝试使用 org.json 库将每个字符串转换为 JSONObject,但显然它不是可序列化的对象。
有什么建议吗?任何可以运行的快速 Scala JSON 库?
或者一般建议如何使用 toJSON 方法。
更新
这有点浪费,但这个选项对我有用:
val res = df.toJSON.map(new JSONObject(_).toString).collect()
由于 JSONObject 不可序列化 - 我可以使用它的 toString 来获取有效的 JSON 格式。
如果您对如何改进它仍有任何建议 - 请告诉我。
【问题讨论】:
-
你能用你的数据框的样本数据更新吗?
-
当我使用
toJSON时,这些引号没有转义。我正在使用 Spark 1.6。 -
@philantrovert,这很奇怪,我们使用的是 Spark 1.6.1。我在网上看到的关于这个问题的所有问题,都说格式是一样的。
-
@RameshMaharjan,抱歉,我无法提供数据帧结构,这不是我的私人代码。但是,如果有帮助,我可以说它有 2 个嵌套字段。我知道我可以从数据框中提取模式,无论如何我可以使用该模式来编写 JSONObject 吗?
-
@LiranBo org.codehaus.jettison.json.JSONObject 确实是可序列化的。
标签: scala apache-spark