从 SparkSQL 在 scala 中保存 JSON

Posted

技术标签:

【中文标题】从 SparkSQL 在 scala 中保存 JSON【英文标题】:Saving JSON in scala from SparkSQL 【发布时间】:2015-10-18 17:24:30 【问题描述】:

我正在使用 Spark SQL 从 JSON 文件中提取一些信息。问题是我想将 SQL 分析的结果保存到另一个 JSON 中,以便使用 Plateau 或 d3.js 绘制它。问题是我不知道该怎么做。有什么建议吗?

val inputTable = sqlContext.jsonFile(inputDirectory).cache() inputTable.registerTempTable("inputTable")

val languages = sqlContext.sql("""
        SELECT 
            user.lang, 
            COUNT(*) as cnt
        FROM tweetTable 
        GROUP BY user.lang
        ORDER BY cnt DESC 
        LIMIT 15""")
languages.rdd.saveAsTextFile(outputDirectory + "/lang")
languages.collect.foreach(println)

我不介意将数据保存到 .csv 文件中,但我不知道具体该怎么做。

谢谢!

【问题讨论】:

可能重复***.com/questions/33174443/… 【参考方案1】:

只是

val languagesDF: DataFrame = sqlContext.sql("<YOUR_QUERY>")
languagesDF.write.json("your.json")

您无需返回RDD

不过,请注意,您的 JSON 将被拆分为多个部分。 如果这不是您的意图,请阅读

Save a large Spark Dataframe as a single json file in S3 和 Write single CSV file using spark-csv(此处用于 CSV,但可以轻松适应 JSON)

关于如何规避这一点(如果确实需要)。重点在于使用repartitioncoalesce

【讨论】:

无论如何,您知道是否可以避免使用 hadoopish 格式并将数据存储到我选择的 s3 密钥名称下的文件中,而不是使用 _SUCCES 和 part-* 的目录?

以上是关于从 SparkSQL 在 scala 中保存 JSON的主要内容,如果未能解决你的问题,请参考以下文章

SparkSQL

scala用户定义函数在spark sql中不起作用

sparksql 表定义 存储在哪

scala可以使用sparksql查询吗

Scala 中的 Spark SQL(v2.0) UDAF 返回空字符串

scala实战之SparkSQL应用实例(单表count和groupby多来源表join等)