проблема записи искрового фрейма - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть этот DF:

val df1 = df.filter("brand like '%\"%'").select("brand", "edited_brand").show(10, false)
+----------------------+----------------------+  
|brand                 |edited_brand          |  
+----------------------+----------------------+  
|"carter's"            |"carter's"            |  
|"carter's"            |"carter's"            |  
|"the children's place"|"the children's place"|  
|"the children's place"|"the children's place"|  
|"the children's place"|"the children's place"|  
+----------------------+----------------------+

Я записываю кадр данных в hdfs, используя следующую инструкцию:

df.filter("brand like '%\"%'").select("brand", "edited_brand").write.format("com.databricks.spark.csv").option("delimiter","|").save("/user/xyz/brand_output")

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

hdfs dfs -cat /user/xyz/brand_output/part-r-00000-e9b284f4-eaf8-4782-9a1c-88ca0af10714.csv
"\"carter's\""|"\"carter's\""  
"\"the children's place\""|"\"the children's place\""  
"\"the children's place\""|"\"the children's place\""  
...  

Меня беспокоит преобразование "carter's" (содержимое столбца "(двойные кавычки) в" \ "carter's \" ". Для других записей это нене содержите "в нем пишутся нормальным способом.Для бывшего старого военно-морского флота | старого военно-морского флота

Я хотел бы знать, почему данные пишутся таким способом и как избавиться от этих escape-символов.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Устранено это с помощью опции - ("quote", "\ u0000") при записи фрейма данных.

df.filter("brand like '%\"%'").select("brand", "edited_brand").write.format("com.databricks.spark.csv").option("delimiter","|").option("quote", "\u0000").save("/user/xyz/brand_output")
0 голосов
/ 19 сентября 2018

Начальное строковое значение содержит кавычки: | "carter's" |Когда эта строка записывается в CSV, исходная строка должна быть сохранена как есть, с кавычками, а также в строках формата CSV, заключенных в кавычки - значит, будут добавлены дополнительные кавычки.

Кавычки из исходной строки экранируютсяс \ ", и все строки включены в дополнительные кавычки в соответствии с форматом CSV, все правильно.

Во избежание экранирования кавычки могут быть удалены в исходной строке, например, с помощью" DataFrameNaFunctions.replace ". Также кавычки в CSVможно опустить с помощью "quoteMode", подробности здесь: https://github.com/databricks/spark-csv

...