使用 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 文件具有我期望的输出。
我正在使用 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 文件具有我期望的输出。