SparkSQL,如何將DataFrame轉為json格式
今天主要介紹一下如何將 Spark dataframe 的資料轉成 json 資料。用到的是 scala 提供的 json 處理的 api。
用過 Spark SQL 應該知道,Spark dataframe 本身有提供一個 api 可以供我們將資料轉成一個 JsonArray,我們可以在 spark-shell 裡頭舉個例子來看一下。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().master("master").appName("test").config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate();
//提供隱式轉換功能,比如將 Rdd 轉為 dataframe
import spark.implicits._
val df:DataFrame = sc.parallelize(Array(("abc",2),("efg",4))).toDF()
df.show()
/*-------------show -----------
+---+---+
| _1| _2|
+---+---+
|abc| 2|
|efg| 4|
+---+---+
*/
//這裡使用 dataframe Api 轉換成 jsonArray
val jsonStr:String = a.toJSON.collectAsList.toString
/*--------------- json String-------------
[{"_1":"abc","_2":2}, {"_1":"efg","_2":4}]
*/
可以發現,我們可以使用 dataframe 提供的 api 直接將 dataframe 轉換成 jsonArray 的形式,但這樣子卻有些冗餘。以上面的例子來說,很多時候我要的不是這樣的形式。
[{"_1":"abc","_2":2}, {"_1":"efg","_2":4}]
而是下面這種形式。
[{"abc":2}, {"efg":4}]
這才是我們通常會使用到的 json 格式。以 dataframe 的 api 轉換而成的 json 明顯太過冗餘。為此,我們需要藉助一些 json 處理的包,本著能懶則懶的原則,直接使用 scala 提供的 json 處理包。
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().master("master").appName("test").config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate();
//提供隱式轉換功能,比如將 Rdd 轉為 dataframe
import spark.implicits._
val df:DataFrame = sc.parallelize(Array(("abc",2),("efg",4))).toDF()
df.show()
/*-------------show -----------
+---+---+
| _1| _2|
+---+---+
|abc| 2|
|efg| 4|
+---+---+
*/
//接下來不一樣了
val df2Array:Array[Tuple2[String,Int]] = df.collect().map{case org.apache.spark.sql.Row(x:String,y:Int) => (x,y)}
val jsonData:Array[JSONObject] = aM.map{ i =>
new JSONObject(Map(i._1 -> i._2))
}
val jsonArray:JSONArray = new JSONArray(jsonData.toList)
/*-----------jsonArray------------
[{"abc" : 2}, {"efg" : 4}]
*/
大概說明一下上述的程式碼,首先我們要先將 df 變數進行 collect 操作,將它轉換成 Array ,但是要生成 jsonObject 得是 Array[Tuple2[T,T]] 的格式,所以我們需要再進一步轉換成對應格式。這裡的 map 是函數語言程式設計裡面的 map 。
然後也是用 map 操作生成 Array[JSONObject],最後再轉換成 JSONArray 就可以。
將資料轉換成 json 的格式通常不能太大,一般用在 spark 跑出資料結果後寫入到其他資料庫的時候會用到,比如 Mysql 。
以上~~
歡迎關注公眾號哈爾的資料城堡,裡面有資料,程式碼,以及深度的思考。
相關文章
- Spark SQL,如何將 DataFrame 轉為 json 格式SparkSQLJSON
- Python將xml格式轉換為json格式PythonXMLJSON
- js將xml格式內容轉換為json格式XMLJSON
- JavaScript將物件轉換為JSON格式字串JavaScript物件JSON字串
- eval()將JSON格式字串轉換為物件JSON字串物件
- JavaScript將JSON格式字串轉換為物件JavaScriptJSON字串物件
- 如何將Excel檔案解析為json格式ExcelJSON
- 將任意格式轉換為JSON資料格式的工具類JSON
- SparkSQL /DataFrame /Spark RDD誰快?SparkSQL
- javascript如何將字串轉換成json格式物件JavaScript字串JSON物件
- jquery實現將字串轉換為json格式物件jQuery字串JSON物件
- js 將json字串轉換為json格式物件程式碼例項JSON字串物件
- 將網址url中的引數轉化為JSON格式JSON
- 將json格式物件轉換為查詢字串程式碼例項JSON物件字串
- 將表單元素轉換為json格式物件例項程式碼JSON物件
- 如何將影片從QSV格式轉換為MP4格式
- 將json格式物件轉換成陣列物件JSON物件陣列
- 【Spark篇】---SparkSQL初始和建立DataFrame的幾種方式SparkSQL
- 如何將Spring Boot應用中日誌輸出格式改為JSON?-DEVSpring BootJSONdev
- 將json資料轉換為Python字典將json資料轉換為Python字典JSONPython
- java將物件轉為json的方式Java物件JSON
- 如何將檔案PDF格式轉換成Word格式
- 如何用OpenCV將影像從sRGB格式轉換為Adobe RGB格式OpenCV
- Java 將Excel轉為et和ett格式JavaExcel
- Excel表格轉Json格式ExcelJSON
- Java將Boolean轉為Json物件的方法JavaBooleanJSON物件
- js 將json字串轉換為json物件的方法解析JSON字串物件
- JavaScript:如何將JSON物件轉換成JSON字串呢JavaScriptJSON物件字串
- python json格式轉url引數&分割, url引數轉json格式PythonJSON
- 使用Visual Studio將JSON格式資料自動轉化為對應的類JSON
- 如何在Mac上將 Spotify 音樂轉換為 MP3 格式?Mac
- vscode如何將所有檔案格式lf批次轉換為crlfVSCode
- 如何將plist檔案或者陣列NSArray轉化為.json檔案?陣列JSON
- 如何透過Python將JSON格式檔案匯入redis?PythonJSONRedis
- livp怎麼轉jpg 如何將live照片格式在電腦上轉換為jpg
- PHP利用JSON將XML轉換為陣列PHPJSONXML陣列
- 在 AngularJS 中將 XML 轉換為 JSONAngularXMLJSON
- javascript中如何判斷一個字串是否為JSON格式JavaScript字串JSON