CSV 输出文件中不显示引号
Quotes not displayed in CSV output file
初始数据在 Dataset 中,我正在尝试将每个单元格值写入 csv 文件以放在引号中。
result.coalesce(1).write()
.option("delimiter", "|")
.option("header", "true")
.option("nullValue", "")
.option("quoteMode", "ALL_NON_NULL")
.csv(Location);
预期输出:
null
"London"|"UK"
"Delhi"|"India"
"Moscow"|"Russia"
当前输出:
null
London|UK
Delhi|India
Moscow|Russia
Spark 版本为 2.3
"quoteMode"
是 databrick 的 CSV 编写器的一个选项。在这里,您使用的是 spark 的内置 CSV 编写器,它不支持该选项。查看 this page 了解可用选项。
在您的情况下,您正在寻找的选项是 .option("quoteAll", true)
。
正如@Oli 回答的那样,您的第一个选项是 "quoteMode"
在 CSV 编写器中。
如果您需要更多控制,那么您可以在所有列上使用 concat 函数来为您的值加上引号作为前缀和后缀。下面的例子
import org.apache.spark.sql.functions.{concat, lit, col}
val df = Seq(
("1","a",null,"c"),
("3",null,"d","c"),
("4","a","b",null)
).toDF("id","A","B","C")
df.show()
+---+----+----+----+
| id| A| B| C|
+---+----+----+----+
| 1| a|null| c|
| 3|null| d| c|
| 4| a| b|null|
+---+----+----+----+
val dfquotes = df.select(df.columns.map(c => concat(lit("\""), col(c), lit("\"")).alias(c)): _*)
dfquotes.show()
+---+----+----+----+
| id| A| B| C|
+---+----+----+----+
|"1"| "a"|null| "c"|
|"3"|null| "d"| "c"|
|"4"| "a"| "b"|null|
+---+----+----+----+
初始数据在 Dataset
result.coalesce(1).write()
.option("delimiter", "|")
.option("header", "true")
.option("nullValue", "")
.option("quoteMode", "ALL_NON_NULL")
.csv(Location);
预期输出:
null
"London"|"UK"
"Delhi"|"India"
"Moscow"|"Russia"
当前输出:
null
London|UK
Delhi|India
Moscow|Russia
Spark 版本为 2.3
"quoteMode"
是 databrick 的 CSV 编写器的一个选项。在这里,您使用的是 spark 的内置 CSV 编写器,它不支持该选项。查看 this page 了解可用选项。
在您的情况下,您正在寻找的选项是 .option("quoteAll", true)
。
正如@Oli 回答的那样,您的第一个选项是 "quoteMode"
在 CSV 编写器中。
如果您需要更多控制,那么您可以在所有列上使用 concat 函数来为您的值加上引号作为前缀和后缀。下面的例子
import org.apache.spark.sql.functions.{concat, lit, col}
val df = Seq(
("1","a",null,"c"),
("3",null,"d","c"),
("4","a","b",null)
).toDF("id","A","B","C")
df.show()
+---+----+----+----+
| id| A| B| C|
+---+----+----+----+
| 1| a|null| c|
| 3|null| d| c|
| 4| a| b|null|
+---+----+----+----+
val dfquotes = df.select(df.columns.map(c => concat(lit("\""), col(c), lit("\"")).alias(c)): _*)
dfquotes.show()
+---+----+----+----+
| id| A| B| C|
+---+----+----+----+
|"1"| "a"|null| "c"|
|"3"|null| "d"| "c"|
|"4"| "a"| "b"|null|
+---+----+----+----+