Котировки не отображаются в выходном файле CSV - PullRequest
1 голос
/ 04 февраля 2020

Исходные данные находятся в наборе данных , и я пытаюсь записать в 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

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

Как ответил @Oli, первый вариант, который у вас есть, - "quoteMode" в CSV Writer.

Если вам нужен больший контроль, тогда вы можете использовать функцию 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|
+---+----+----+----+
2 голосов
/ 04 февраля 2020

"quoteMode" - опция CSV-модуля записи данных. Здесь вы используете искатель CSV, который не поддерживает эту опцию. Посмотрите на эту страницу для доступных опций.

В вашем случае, вы ищете вариант .option("quoteAll", true).

...