1. 程式人生 > >Spark的Dataframe(Dataset)轉Json

Spark的Dataframe(Dataset)轉Json

                       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字串處理起來更友好。