Spark SQL - 如何将 DataFrame 写入文本文件?

Posted

技术标签:

【中文标题】Spark SQL - 如何将 DataFrame 写入文本文件?【英文标题】:Spark SQL - How to write DataFrame to text file? 【发布时间】:2016-03-15 12:10:55 【问题描述】:

我正在使用Spark SQL 来读取 parquet 和写入 parquet 文件。

但在某些情况下,我需要将DataFrame 写为文本文件,而不是 Json 或 Parquet。

是否支持任何默认方法,或者我必须将该 DataFrame 转换为 RDD 然后使用 saveAsTextFile() 方法?

【问题讨论】:

【参考方案1】:

使用Databricks Spark-CSV,您可以直接保存到 CSV 文件,然后像这样从 CSV 文件加载

import org.apache.spark.sql.SQLContext

SQLContext sqlContext = new SQLContext(sc);
DataFrame df = sqlContext.read()
    .format("com.databricks.spark.csv")
    .option("inferSchema", "true")
    .option("header", "true")
    .load("cars.csv");

df.select("year", "model").write()
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("codec", "org.apache.hadoop.io.compress.GzipCodec")
    .save("newcars.csv");

【讨论】:

应该是 df.select("year", "model").write.format 而不是 df.select("year", "model").write().format ?否则你会得到一个TypeError: 'DataFrameWriter' object is not callable 错误 这是官方为 Spark 1.3 提供的示例。如果你使用 Spark 1.4+,你应该按照你的建议使用df.select("year", "model").write.format【参考方案2】:
df.repartition(1).write.option("header", "true").csv("filename.csv")

【讨论】:

以上是关于Spark SQL - 如何将 DataFrame 写入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BigQuery SQL 查询结果转换为 Spark DataFrame?

如何在 Spark SQL 中向现有 Dataframe 添加新列

Spark:如何将 DataFrame 更改为 LibSVM 并执行逻辑回归

如何将列除以 Spark DataFrame 中的总和

如何按 Seq[org.apache.spark.sql.Column] 降序排序 spark DataFrame?

如何将 Scala Spark Dataframe 转换为 LinkedHashMap[String, String]