Записать pyspark dataframe в файл, сохраняя вложенные кавычки, но не "внешние"? - PullRequest
0 голосов
/ 12 октября 2019

Есть ли способ сохранить вложенные кавычки в значении фрейма данных pyspark при записи в файл (в моем случае это TSV), а также избавиться от «внешних» (т. Е. Тех, которые обозначают строковое значение в столбце)?

>>> dff = sparkSession.createDataFrame([(10,'this is "a test"'), (14,''), (16,'')], ["age", "comments"])
>>> dff.show()
+---+----------------+
|age|        comments|
+---+----------------+
| 10|this is "a test"|
| 14|                |
| 16|                |
+---+----------------+
>>> dff.write\
    .mode('overwrite')\
    .option("sep", "\t")\
    .option("quoteAll", "false")\
    .option("emptyValue", "").option("nullValue", "")\
    .csv('/tmp/test')

затем

$ cat /tmp/test/part-000*
10  "this is \"a test\""
14  
16

# what I'd want to see is
10  this is "a test"
14  
16
# because I am later parsing based only on TAB characters, so the quote sequences are not a problem in that regard

Есть ли способ записать кадр данных в этом желаемом формате?

* в стороне, более подробная информация об используемых аргументах можетможно найти здесь

1 Ответ

1 голос
/ 12 октября 2019

Установите для параметра escapeQuotes значение false:

>>> dff = spark.createDataFrame([(10,'this is "a test"'), (14,''), (16,'')], ["age", "comments"])
>>> dff.show()
+---+----------------+                                                          
|age|        comments|
+---+----------------+
| 10|this is "a test"|
| 14|                |
| 16|                |
+---+----------------+

>>> dff.write\
...     .mode('overwrite')\
...     .option("sep", "\t")\
...     .option("quoteAll", "false")\
...     .option("emptyValue", "").option("nullValue", "")\
...     .option("escapeQuotes", "false").csv('/tmp/test')
>>> 
➜  ~ cd /tmp/test           
➜  test ls
_SUCCESS                                                 part-00001-f702e661-15c2-4ab9-aef2-8dad5d923412-c000.csv part-00003-f702e661-15c2-4ab9-aef2-8dad5d923412-c000.csv
part-00000-f702e661-15c2-4ab9-aef2-8dad5d923412-c000.csv part-00002-f702e661-15c2-4ab9-aef2-8dad5d923412-c000.csv
➜  test cat part*         
10  this is "a test"
14  
16  
➜  test 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...