Удаление двойных кавычек из данных типа String при записи CSV с использованием SPARK - PullRequest
0 голосов
/ 08 января 2020

Мы используем Java с Spark. Текущее требование состоит в том, чтобы написать набор данных для Spark с пробелом в качестве разделителя. Ниже приведен код, который я пробовал:

 fooDataSetObject.coalesce(1).map((MapFunction<FooDataSet, FooDataSet>) fooDataSet -> 
 FileOperations.call(fooDataSet,broadcastedProperty),encoder).select("column","cons_zero",
            "columnA","columnB","columnC","columnD",
            "constants_value")
            .write()
            .format("com.databricks.spark.csv")
            .option("inferSchema", true)
            .option(Constants.DELIMITER, " ")
            .option(Constants.IGNORE_LEADING_WHITESPACE, ApplicationConstants.FALSE)
            .option(Constants.IGNORE_TRAILING_WHITESPACE, ApplicationConstants.FALSE)
            .option("quote", " ")
            .mode(SaveMode.Overwrite)
            .save(path);

Я использовал QuoteMode как None, но не работал. Когда я попытался использовать опцию цитирования со значением в качестве "\ u0000", он добавил специальные символы в файл. Я также попытался использовать опцию цитаты с явным применением опции кодировки UTF-8.

Есть ли что-то еще, что нужно сделать со стороны конфигурации Java или SPARK. Я попытался использовать --conf в качестве параметра при отправке работы с искрой и предоставлении кодировщика как UTF-8.

Любая помощь или предложения приветствуются.

Пример значений DataSet:

|  00123400|   93115212345678|     16|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|66754325-83d1-426...|          24|                null|   01|c28380c5-c926-4b4...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|cb032911-4c4e-406...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     17|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|23703242-e130-48b...|          24|                null|   01|a4e52b47-8866-4d1...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|ee98f2e8-f489-4f3...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     19|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|c7138601-b26d-49d...|          24|                null|   01|dfefcf96-4f56-4ab...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|dd9027bd-4fcd-45d...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |
|  00123400|   93115212345678|     20|       0C|Tickets Cash-back |                57695857|           602140|                24394483|                          24394483|        0|                  99|60214057695857Tic...|63cbd563-2af4-472...|          24|                null|   01|9629f346-7dde-429...|Identity Defence  |Let's Go...Rewards|             null|     null|         ON|    17|          12345678|GB 29 NWBK 12345 ...|         931152|            null|7b9d0698-0de1-45d...|                     null|            20987|ABC...|                 GBR|                962000|             cashback|null|X Batch        |                null|                    99|12345             |

Вывод:

93115212345678 0 "GB 29 NWBK 12345 78978911     " 00123400 "12345             " 99 "60214057695857Tickets Cash-back 0"

Ответы [ 2 ]

1 голос
/ 08 января 2020

Пожалуйста, используйте этот код.

.option("quote", "\"")
.option("escape", "\"")

Для получения дополнительной информации см. Источник данных CSV для Apache Spark .

0 голосов
/ 09 января 2020

Прошел следующую документацию.

  1. кавычка (по умолчанию "): устанавливает один символ, используемый для экранирования кавычек, где разделитель может быть частью значения. Если вы хотите отключить кавычки, вам нужно установить не нуль, а пустая строка. Это поведение отличается от com.databricks.spark.csv.
  2. escape (по умолчанию): устанавливает один символ, используемый для экранирования кавычек внутри уже заключенного в кавычки значения.

Теперь, даже если я изменил код на использование SEP вместо DELIMETER, это вызывало ту же проблему, потому что Spark добавлял \ u0000, который представляет символ NULL. перешли на использование формата Spark Text, и я использую форматировщик Java в backgroud для создания строки, разделенной запятыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...