使用 Spark SQL 写入时打印多个 header 行

Multiple header rows being printed when writing with Spark SQL

我正在使用 Spark SQL 加载大型 CSV 文件并将它们加入一个公共列。在我的代码中执行加入后,我想将 table 保存回新的 CSV 文件。我正在使用 DataFrame 的 write() 方法来执行此操作。检查文件后,我惊讶地看到多次打印出 header,然后是数据,然后是更多的 header。例如:

name, age, addr, job, salary
name, age, addr, job, salary
name, age, addr, job, salary

Bob, 34, 123 Fake St, Programmer, 10000000
June, 23, 5 Tree Ave., College Student, 15000
Rick, 12, 43 Ware St., Student, 0

name, age, addr, job, salary
name, age, addr, job, salary
name, age, addr, job, salary

<more data here>

此输出是意外的,特别是因为 DataFrame class 的 show() 方法将 table 打印到控制台并显示我期望的内容。

我用来执行写入的代码:

bigTable.write().mode(SaveMode.Overwrite).format("com.databricks.spark.csv")
            .option("header", "true").save(settings.getValue().outputDir  +"/bigTable.csv");

使用设置 option("header", "false") 时,数据值会正确保存在 CSV 文件中。这是一个错误吗?

我相信我已经通过使用 partition()coalesce() 函数找到了解决方案:

bigTable.repartition(1).coalesce(1).write().format("com.databricks.spark.csv").option("header", "true").save("myoutputfile.csv");

添加这些调用后,CSV 文件具有我期望的输出。