【问题标题】:Not able to write to CSV with header using Spark Scala无法使用 Spark Scala 写入带有标头的 CSV
【发布时间】:2023-04-02 15:58:01
【问题描述】:

我以前从未遇到过这个问题,但由于某种原因,当我在 spark scala 中将数据帧写入 CSV 时,输出 CSV 文件的格式完全错误。 1,没有任何标题行,2,列之间有随机的大空白。

但有趣的是,当我在 IDE 中执行 df.show 时,它输出的标题和格式都非常好。

我正在使用一个非常基本的通用写入 csv 方法,

df.write.csv("output.csv")

为什么会发生这种情况?是不是因为一些加入和合并,我正在做的事情是分布在集群中,并且在写入 CSV 之前无法正确重新格式化?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    您缺少一些选项:

    • sep(默认,):设置单个字符作为每个字段和值的分隔符。
    • quote(默认"):设置用于转义引用值的单个字符,其中分隔符可以是值的一部分。如果设置了空字符串,则使用 u0000(空字符)。
    • escape(默认 \):设置一个字符,用于在已引用的值内转义引号。
    • charToEscapeQuoteEscaping(默认escape\0):设置用于转义引号字符的单个字符。当转义字符和引号字符不同时,默认值为转义字符,否则为\0。
    • escapeQuotes(默认true):一个标志,指示包含引号的值是否应始终包含在引号中。默认是转义所有包含引号字符的值。
    • quoteAll(默认false):指示是否所有值都应始终括在引号中的标志。默认是只转义包含引号字符的值。
    • header(默认false):将列名写为第一行。
    • nullValue(默认empty string):设置空值的字符串表示。
    • compression(默认null):保存到文件时使用的压缩编解码器。这可以是已知的不区分大小写的缩写名称之一(none、bzip2、gzip、lz4、snappy 和 deflate)。
    • dateFormat(默认 yyyy-MM-dd):设置表示日期格式的字符串。自定义日期格式遵循 java.text.SimpleDateFormat 中的格式。这适用于日期类型。
    • timestampFormat(默认 yyyy-MM-dd'T'HH:mm:ss.SSSXXX):设置表示时间戳格式的字符串。自定义日期格式遵循 java.text.SimpleDateFormat 中的格式。这适用于时间戳类型。
    • ignoreLeadingWhiteSpace(默认 true)`:指示是否应跳过正在写入的值的前导空格的标志。
    • ignoreTrailingWhiteSpace(默认 true):一个标志,用于定义是否应跳过正在写入的值的尾随空格。

    在你的情况下:

    df.write.option("header","true").csv("output.csv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-30
      • 2021-12-21
      • 2018-03-18
      • 1970-01-01
      • 2016-10-09
      • 2017-05-22
      • 2020-09-17
      • 2015-12-08
      相关资源
      最近更新 更多