如何将DataFrame转换为Json?

ash*_*arg 17 json scala apache-spark apache-spark-sql

我有一个巨大的Json文件,其中一小部分如下:

{
    "socialNews": [{
        "adminTagIds": "",
        "fileIds": "",
        "departmentTagIds": "",
        ........
        ........
        "comments": [{
            "commentId": "",
            "newsId": "",
            "entityId": "",
            ....
            ....
        }]
    }]
    .....
    }
Run Code Online (Sandbox Code Playgroud)

我在社交新闻中应用了侧视图片段如下:

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")
Run Code Online (Sandbox Code Playgroud)

现在我想将此结果(DataFrame)转换回json并保存到文件中,但我无法找到任何scala api进行转换.是否有任何标准库可以做到这一点或某种方式来解决它?

Nik*_*ita 26

val result: DataFrame = sqlContext.read.json(path)
result.write.json("/yourPath")
Run Code Online (Sandbox Code Playgroud)

该方法write位于DataFrameWriter类中,您可以在DataFrame对象上访问它.只需确保您的rdd是类型DataFrame而不是弃用类型SchemaRdd.您可以使用显式提供类型定义val data: DataFrame或强制转换为dataFrame toDF().


MrC*_*ine 21

如果你有一个DataFrame,那么有一个API可以转换回包含json记录的RDD [String].

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)
Run Code Online (Sandbox Code Playgroud)

这应该从Spark 1.4开始提供.在您创建的结果DataFrame上调用API.

此处列出可用的API


小智 5

sqlContext.read().json(dataFrame.toJSON())
Run Code Online (Sandbox Code Playgroud)