Как убрать двойную кавычку, когда значение в Spark пустое? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы удалить двойные кавычки "", когда значение пусто при регистрации моего CSV в S3 с помощью метода df.write.save () Spark

Версия Spark: 2.4.0

Python Версия: 3.6.5

Вот мой код на Python для загрузки файла CSV:

df = spark.read.load(
    path('in'),
    format = 'csv',
    delimiter = '|',
    encoding = 'utf-8',
    header = 'true'
)

Загруженный файл CSV:

|id|first_name|last_name|zip_code|
|1 |          |Elsner   |57315   |
|2 |Noelle    |         |        |
|3 |James     |Moser    |48256   |

Вот мой код в Python для записи файла CSV:

df.write.save(
    path('out'),
    format = 'csv',
    delimiter = '|',
    header = 'true'
)

В файле CSV написано:

|id|first_name|last_name|zip_code|
|1 |""        |Elsner   |57315   |
|2 |Noelle    |""       |""      |
|3 |James     |Moser    |48256   |

Как убрать двойную кавычку при регистрации?

Заранее большое спасибо.

Ответы [ 5 ]

0 голосов
/ 19 августа 2019

data.write.format ("csv"). Option ("delimiter", "|"). Option ("emptyValue", "") .option ("nullValue", "") .option ("header")., "истинный") режим ( "перезаписать"), за исключением (. "C: \ Data \ test2")

0 голосов
/ 31 июля 2019

Если вы ищете способ PySpark сделать это, не пытайтесь использовать трюк с нулевой строкой!Это гораздо проще (если вы знаете хитрость ...)

myDF.coalesce(1).write\
    .option("emptyValue", None)\
    .option("nullValue", None)\
    .csv(outFile)

Надеюсь, это поможет!Не могу найти нигде документально

0 голосов
/ 07 мая 2019

Согласно документации Spark , значение по умолчанию nullValue и emptyValue равно None, что приведет к пустой строке.Чтобы установить его на ничего , как вы хотите, вы можете установить его в Unicode NULL:

df.write.save(
    path('out'),
    format = 'csv',
    delimiter = '|',
    header = True,
    nullValue = '\u0000',
    emptyValue = '\u0000'
)
0 голосов
/ 24 июля 2019

ни одно из приведенных выше решений не помогло мне, но они помогли мне направиться в правильном направлении.В итоге получилось добавить опцию emptyValue=u'\u0000' (когда я попытался без предшествующей u, она закончила запись \u0000 литературный в файл CSV)

0 голосов
/ 18 февраля 2019

В вашем фрейме данных есть пустая строка, если вы хотите записать их как нули, вы можете заменить пустую строку на ноль, а затем установить nullValues=None при ее сохранении:

df.replace('', None)              # replace empty string with null
  .write.save(
    path('out'), 
    format='csv', 
    delimiter='|', 
    header=True, 
    nullValue=None                # write null value as None
  )

И этобудет сохранен как:

id|first_name|last_name|zip_code
1||Elsner|57315
2|Noelle||
3|James|Moser|48256
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...