我正在使用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中。这是一个错误吗?
答案 0 :(得分:0)
我相信我已经使用partition()
和coalesce()
函数找到了解决方案:
bigTable.repartition(1).coalesce(1).write().format("com.databricks.spark.csv").option("header", "true").save("myoutputfile.csv");
添加这些调用后,CSV文件的输出为“我希望”。