6

下面的代码不添加默认的双引号。我还尝试使用选项添加 # 和单引号quote,但没有成功。我还使用quoteMode了 withALLNON_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  
4

2 回答 2

6

tl;博士启用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

然而,这不会给你“所有非数字字符的双引号”。对不起。

您可以在CSVOptions中查看作为 CSV 读取器和写入器选项源的所有选项。

pscom.databricks.spark.csv目前只是csv格式的别名。您可以互换使用两者,但csv首选较短的。

ps 使用option("header", false)false作为布尔值而不是字符串),这将使您的代码更加类型安全。

于 2017-04-27T19:22:04.873 回答
2

在已内联旧 CSV 库的 Spark 2.1 中,我看不到任何您想要的csv方法的选项,DataFrameWriter这里所示。

所以我猜你必须“手动”映射你的数据以确定哪些Row组件是非数字并相应地引用它们。您可以isNumeric像这样使用简单的辅助函数:

def isNumeric(s: String) = s.nonEmpty && s.forall(Character.isDigit)

当您映射您的DataSet时,请引用值 where isNumericis false

于 2017-04-27T00:47:51.547 回答