Spark-Csv写quotemode无法正常工作

New*_*101 7 apache-spark apache-spark-sql spark-dataframe

我正在尝试使用Spark-CSV将数据框架编写为CSV文件(https://github.com/databricks/spark-csv)

我正在使用下面的命令

res1.write.option("quoteMode", "NONE").format("com.databricks.spark.csv").save("File")
Run Code Online (Sandbox Code Playgroud)

但是我的CSV文件总是写成

"伦敦"
"哥本哈根"
"莫斯科"

代替

伦敦
哥本哈根
莫斯科

cha*_*ium 11

是.要使用反斜杠字符(\)关闭双引号字符(")的默认转义,必须在.write()方法调用之后使用正确的参数添加.option()方法调用. option()方法调用的方法是改变csv()方法"找到""quote"字符实例的方式.为此,你必须改变"quote"实际意味着的默认值;即改变所寻求的字符从双引号字符(")到Unicode"\ u0000"字符(基本上提供Unicode NUL字符,它不会出现在格式良好的JSON文档中).

val dataFrame =
  spark.sql("SELECT * FROM some_table_with_a_json_column")
val unitEmitCsv =
  dataframe
    .write
    .option("header", true)
    .option("delimiter", "\t")
    .option("quote", "\u0000") //magic is happening here
    .csv("/FileStore/temp.tsv")
Run Code Online (Sandbox Code Playgroud)

这只是我学习尝试使用Apache Spark并发出.csv文件的几个课程中的一个.有关这方面的更多信息和上下文,请参阅我写的标题为" 示例Apache Spark ETL管道集成SaaS " 的博客文章.

  • 是的!它使用tab作为分隔符,但不是. (3认同)
  • 如果是 csv 该怎么办?它在文件中写入特殊字符 \u00。 (2认同)
  • 我只是在显式行中添加了我使用制表符(不是逗号)作为我的列分隔符.我不确定这是否会帮助您了解您需要在我的解决方案中看到的内容. (2认同)

小智 6

使用选项

.option("emptyValue", "")
Run Code Online (Sandbox Code Playgroud)

这是 Spark 2.4+ 中的


Sib*_*ran 5

可以通过将quoteAll选项设置为 false来删除文本的双引号

dataframe.write
 .option("quoteAll", "false")
 .format("csv")
Run Code Online (Sandbox Code Playgroud)

这个例子是按照 Spark 2.1.0 的,没有使用 databricks 库。

  • 对我不起作用,双引号仍然存在。 (6认同)

小智 -3

我可以通过将引用选项设置为单个空格来关闭它

df.coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").option("quote"," ").option("codec", "org.apache.hadoop.io.compress.GzipCodec").save("File path")
Run Code Online (Sandbox Code Playgroud)

但这只会替换用空格代替引号 (") 的选项

还有一种选择,即当定界符和分隔符相同时,引号通常作为限定符来分隔某些列

这样您就可以更改分隔符并自动删除引号

df.coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").option("delimiter", "|").option("codec", "org.apache.hadoop.io.compress.GzipCodec").save("File path")
Run Code Online (Sandbox Code Playgroud)

希望这适用于您的情况