Как преобразовать DataFrame в Json?

У меня есть огромный Json файл, небольшая часть из него:

{
    "socialNews": [{
        "adminTagIds": "",
        "fileIds": "",
        "departmentTagIds": "",
        ........
        ........
        "comments": [{
            "commentId": "",
            "newsId": "",
            "entityId": "",
            ....
            ....
        }]
    }]
    .....
    }

Я применил боковое представление exlode на socialNews следующим образом:

val rdd = sqlContext.jsonFile("file:///home/ashish/test")
rdd.registerTempTable("social")
val result = sqlContext.sql("select * from social LATERAL VIEW explode(socialNews) social AS comment")

Теперь я хочу преобразовать этот результат (DataFrame) в json и сохранить в файл, но я не могу найти какой-либо scala api для преобразования. Есть ли какая-нибудь стандартная библиотека, чтобы сделать это или каким-то образом понять это?

Ответ 1

val result: DataFrame = sqlContext.read.json(path)
result.write.json("/yourPath")

Метод write находится в классе DataFrameWriter и должен быть доступен вам на объектах DataFrame. Просто убедитесь, что ваш rdd имеет тип DataFrame, а не устаревший тип SchemaRdd. Вы можете явно указать определение типа val data: DataFrame или передать в dataFrame с помощью toDF().

Ответ 2

Если у вас есть DataFrame, есть API для преобразования обратно в RDD [String], который содержит записи json.

val df = Seq((2012, 8, "Batman", 9.8), (2012, 8, "Hero", 8.7), (2012, 7, "Robot", 5.5), (2011, 7, "Git", 2.0)).toDF("year", "month", "title", "rating")
df.toJSON.saveAsTextFile("/tmp/jsonRecords")
df.toJSON.take(2).foreach(println)

Это должно быть доступно от Spark 1.4 дальше. Вызовите API на результат, созданный вами DataFrame.

Доступные API доступны здесь

Ответ 3

sqlContext.read().json(dataFrame.toJSON())