Spark的Dataframe(Dataset)轉Json
阿新 • • 發佈:2019-01-12
Spark的Dataframe(Dataset)轉Json字串
Spark的Dataframe(Dataset)轉Json,網上很多都說的太麻煩了,讓你先轉換成collect,然後按照不同的filed欄位去轉義。
完全不用那麼麻煩
原理就是先把Dataset<row>就是Dataframe物件(帶schema的資料型別)轉換成一行一行的String型別資料
Dataset<String> stringDataset = Dataset<Row> rowDataset.toJSON();
這個時候呼叫stringDataset的show方法,你可以看到你的資料如下:
+-----------------------------------------------------------------+ | value| +--------------------+ |{"taskConfigId":"123", "xxx": 123, "date": "2018-11-28 00:12:21"}| |{"taskConfigId":"321", "xxx": 123, "date": "2018-11-28 00:12:21"}| |{"taskConfigId":"qwe", "xxx": 123, "date": "2018-11-28 00:12:21"}| |{"taskConfigId":"34", "xxx": 123, "date": "2018-11-28 00:12:21"}| |{"taskConfigId":"341", "xxx": 123, "date": "2018-11-28 00:12:21"}| +------------------------------------------------------------------+
就相當於你的每一行資料都是一個JSON字樣的字串,你只需要先把這個物件collectAsList,轉換成列表,然後迴圈去處理這些json字串,拼裝為一個jsonarray,然後你想怎麼轉換就怎麼轉換。
程式碼如下:超級簡單
public static String toJsonString(Dataset<Row> rowDataset) { if (rowDataset == null) { return StringUtils.EMPTY; } JSONArray jsonArray = new JSONArray(); Dataset<String> stringDataset = rowDataset.toJSON(); stringDataset.show(); List<String> stringList = stringDataset.collectAsList(); for (String jsonStr : stringList) { JSONObject jsonObject = JSONObject.parseObject(jsonStr); jsonArray.add(jsonObject); } return jsonArray.toString(); }
程式碼是轉換成json字串了,如果你想要JSONARRAY這樣的物件也是可以的,只需要自己改一下程式碼就行。
那麼我們要轉換成這個json字串幹嘛了,當然是去呼叫HTTP型別的介面的時候,把資料作為body物件傳送。
畢竟HTTP的介面對於物件或者json字串處理起來更友好。