Как преобразовать 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())