前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spark dataframe 转换 json

spark dataframe 转换 json

作者头像
机器学习和大数据挖掘
发布2020-04-16 17:10:40
2.3K0
发布2020-04-16 17:10:40
举报
文章被收录于专栏:数据挖掘

首先新建一个dataframe

代码语言:javascript
复制
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{SQLContext, SparkSession}
import scala.util.parsing.json.{JSON, JSONArray, JSONObject}

val conf = new SparkConf().setAppName("TTyb").setMaster("local")
val sc = new SparkContext(conf)
val spark = new SQLContext(sc)
val testDataFrame = spark.createDataFrame(Seq(
  ("1", "asf"),
  ("2", "2143"),
  ("3", "rfds")
)).toDF("label", "col")
testDataFrame.show()

打印结构是:

代码语言:javascript
复制
+-----+----+
|label| col|
+-----+----+
|    1| asf|
|    2|2143|
|    3|rfds|
+-----+----+

spark 自带函数

代码语言:javascript
复制
val sparkFunction = testDataFrame.toJSON.collectAsList.toString
println(sparkFunction)
// 得到结果
// [{"label":"1","col":"asf"}, {"label":"2","col":"2143"}, {"label":"3","col":"rfds"}]

列表型json

但是如果想得到第一列为key,第二列为value,那么写法是这样子的:

代码语言:javascript
复制
val df2Array: Array[(String, String)] = testDataFrame.collect().map { row => (row(0).toString, row(1).toString) }
val jsonData: Array[JSONObject] = df2Array.map { i =>
  new JSONObject(Map(i._1 -> i._2))
}
val jsonArray:JSONArray = new JSONArray(jsonData.toList)
println(jsonArray)
// [{"1" : "asf"}, {"2" : "2143"}, {"3" : "rfds"}]

合并JSONArray key:value

但是上面发现每一个key:value都放在一个括号里面,怎么把他们合并成起来?只需要文本处理一下:

代码语言:javascript
复制
val df2Array: Array[(String, String)] = testDataFrame.collect().map { row => (row(0).toString, row(1).toString) }
val jsonData: Array[JSONObject] = df2Array.map { i =>
  new JSONObject(Map(i._1 -> i._2))
}
val jsTest = jsonData.mkString(",").replace("},{",",")
println(jsTest)
// {"1" : "asf","2" : "2143","3" : "rfds"}

怎么把这个字符串变成map通过key值来取得value?定义一下函数即可:

代码语言:javascript
复制
def regJson(json:Option[Any]):Map[String,Any] = json match {
case Some(map:Map[String,Any]) => map
}
println(regJson(JSON.parseFull(jsTest)))
// Map(1 -> asf, 2 -> 2143, 3 -> rfds)
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • spark 自带函数
  • 列表型json
  • 合并JSONArray key:value
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com