Apache Spark CSV 使用 Windows 换行从 DataFrame 写入 (CRLF)

Apache Spark CSV Write from a DataFrame with Windows New Lines (CRLF)

我 运行 在基于 Unix 的集群中使用 Apache Spark 3.1.2 来为基于 Windows 的摄取系统准备 CSV 文件。当 Windows 系统摄取由集群的 Spark CSV 导出创建的 CSV 文件时,它无法解析 csv,因为新行是 LF \n Unix 风格的新行,而 Windows 系统需要 CRLF \r\n 样式行结尾。

有没有一种方法可以配置 Apache Spark CSV 导出器以使用基于 windows 的新行写入,尽管在 unix 环境中运行?在 CSV 写入之后,是否有一个可以 运行 的 scala 工具可以在导出到 windows 系统之前将文件转换为 windows 新行?

我看过 .option("lineSep", "\r\n") 但我认为那只是为了阅读。

  1. 丑陋的解决方案 - 如果您的字段未转义,您可以将 \r 添加到最后一个字段
  2. 仍然很难看 - 如果你的 csv 字段不需要转义 - 没有奇怪的字符,你可以手动构建行,方法是用逗号连接所有列,在末尾添加 \r 并写成文本
  3. 后处理 - 保存为 csv,读取为文本,将 \r 添加到每行并保存为文本。
  4. 如果文件不是太大 - 我猜他们不是因为你要将它们转移到另一台机器进行处理,你可以使用 linux 工具添加 \r, sed, perl,或者只是 unix2dos util

我必须 post-process 文件。我将它合并到 1 个分区并写出 CSV,然后使用 Java BufferedReader 逐行加载文件。我使用 BufferedOutputWriter 将输入流逐行通过管道传输到编写器中,在每行之间注入 \r\n ... 太蹩脚了。