使用Spark SQL进行写入时,将打印多个标题行



我使用Spark SQL加载大型CSV文件,并将它们连接到一个公共列上。在代码中执行联接后,我想将表保存回一个新的CSV文件。我使用DataFrame的write()方法来完成此操作。在检查文件时,我惊讶地看到标题被打印了多次,后面是数据,后面是更多的标题。例如:

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类的show()方法将表打印到控制台并显示我所期望的内容。

我用来执行写入的代码:

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文件将具有我所期望的输出。

相关内容

  • 没有找到相关文章

最新更新