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字符串处理起来更友好。

猜你喜欢

转载自blog.csdn.net/tianhouquan/article/details/85344883