使用Spark SQL写入时会打印多个标题行

时间:2016-04-07 20:15:45

标签: java apache-spark apache-spark-sql spark-dataframe

我正在使用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中。这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

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

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

添加这些调用后,CSV文件的输出为“我希望”。