如何保存所有字段都被引用的 CSV?
How to save CSV with all fields quoted?
下面的代码没有添加默认的双引号。我还尝试使用选项 quote
添加 # 和单引号,但没有成功。我还使用了 quoteMode
和 ALL
和 NON_NUMERIC
选项,输出仍然没有变化。
s2d.coalesce(64).write
.format("com.databricks.spark.csv")
.option("header", "false")
.save(fname)
我可以尝试其他选择吗?我在 spark 2.1 上使用 spark-csv 2.11。
它产生的输出:
d4c354ef,2017-03-14 16:31:33,2017-03-14 16:31:46,104617772177,340618697
我正在寻找的输出:
“d4c354ef”,”2017-03-14 16:31:33”,”2017-03-14 16:31:46”,104617772177,340618697
在已内联旧 CSV 库的 Spark 2.1 中,我在 DataFrameWriter
的 csv
方法中没有看到任何您想要的选项,如 here 所示。
所以我猜你必须映射你的数据 "manually" 以确定哪些 Row
组件是非数字并相应地引用它们。您可以像这样使用一个简单的 isNumeric
辅助函数:
def isNumeric(s: String) = s.nonEmpty && s.forall(Character.isDigit)
在映射 DataSet
时,引用 isNumeric
为 false
的值。
tl;dr 启用 quoteAll
选项。
scala> Seq(("hello", 5)).toDF.write.option("quoteAll", true).csv("hello5.csv")
以上给出了以下输出:
$ cat hello5.csv/part-00000-a0ecb4c2-76a9-4e08-9c54-6a7922376fe6-c000.csv
"hello","5"
假设 quote
是 "
(参见 CSVOptions)
然而那不会给你 "Double quotes around all non-numeric characters." 抱歉。
您可以在 CSVOptions 中看到作为 CSV reader 和编写器选项来源的所有选项。
p.s。 com.databricks.spark.csv
目前只是 csv
格式的别名。您可以交替使用两者,但首选较短的 csv
。
p.s。使用 option("header", false)
(false
作为布尔值而不是字符串)这将使您的代码稍微更加类型安全。
下面的代码没有添加默认的双引号。我还尝试使用选项 quote
添加 # 和单引号,但没有成功。我还使用了 quoteMode
和 ALL
和 NON_NUMERIC
选项,输出仍然没有变化。
s2d.coalesce(64).write
.format("com.databricks.spark.csv")
.option("header", "false")
.save(fname)
我可以尝试其他选择吗?我在 spark 2.1 上使用 spark-csv 2.11。
它产生的输出:
d4c354ef,2017-03-14 16:31:33,2017-03-14 16:31:46,104617772177,340618697
我正在寻找的输出:
“d4c354ef”,”2017-03-14 16:31:33”,”2017-03-14 16:31:46”,104617772177,340618697
在已内联旧 CSV 库的 Spark 2.1 中,我在 DataFrameWriter
的 csv
方法中没有看到任何您想要的选项,如 here 所示。
所以我猜你必须映射你的数据 "manually" 以确定哪些 Row
组件是非数字并相应地引用它们。您可以像这样使用一个简单的 isNumeric
辅助函数:
def isNumeric(s: String) = s.nonEmpty && s.forall(Character.isDigit)
在映射 DataSet
时,引用 isNumeric
为 false
的值。
tl;dr 启用 quoteAll
选项。
scala> Seq(("hello", 5)).toDF.write.option("quoteAll", true).csv("hello5.csv")
以上给出了以下输出:
$ cat hello5.csv/part-00000-a0ecb4c2-76a9-4e08-9c54-6a7922376fe6-c000.csv
"hello","5"
假设 quote
是 "
(参见 CSVOptions)
然而那不会给你 "Double quotes around all non-numeric characters." 抱歉。
您可以在 CSVOptions 中看到作为 CSV reader 和编写器选项来源的所有选项。
p.s。 com.databricks.spark.csv
目前只是 csv
格式的别名。您可以交替使用两者,但首选较短的 csv
。
p.s。使用 option("header", false)
(false
作为布尔值而不是字符串)这将使您的代码稍微更加类型安全。