Насколько я знаю, есть только одна опция для паркетных файлов.И это для сжатия.Другие параметры, такие как «цитата», «разделитель», «escape», предназначены для файлов CSV.Таким образом, они не работают для паркетных файлов.
Я пытался смоделировать ваш случай, и я думаю, что лучшим решением для этого случая является использование функций.Сначала я создал файл csv и поместил его в HDFS
[ali@aliyesilli ~]$ hadoop fs -cat /test/exCsv/test.csv
A,B,C,D,E
1,2,"3,4","a, ""HEllo"" c",5
Затем я прочитал его как файл csv и снова сохранил его как файл паркета
>>> df = spark.read.csv('hdfs://localhost:8020/test/exCsv',header=True)
>>> df.show()
+---+---+---+----------------+---+
| A| B| C| D| E|
+---+---+---+----------------+---+
| 1| 2|3,4|"a, ""HEllo"" c"| 5|
+---+---+---+----------------+---+
>>> df.write.parquet('hdfs://localhost:8020/test/exPar')
Когда я попытался прочитатьфайл parguet, столбец D включает двойные кавычки, как вы упомянули
>>> spark.read.parquet('hdfs://localhost:8020/test/exPar').show()
+---+---+---+----------------+---+
| A| B| C| D| E|
+---+---+---+----------------+---+
| 1| 2|3,4|"a, ""HEllo"" c"| 5|
+---+---+---+----------------+---+
Затем я определил функцию, которая называется strip, и использую ее с функцией regexp_replace для создания строки, которую вы хотите увидеть
>>> import pyspark.sql.functions as func
>>> strip=func.udf(lambda x: x.strip('"'))
>>>
>>> spark.read.parquet('hdfs://localhost:8020/test/exPar').withColumn('D', func.regexp_replace(strip('D'), '""', '"')).show()
+---+---+---+------------+---+
| A| B| C| D| E|
+---+---+---+------------+---+
| 1| 2|3,4|a, "HEllo" c| 5|
+---+---+---+------------+---+
Может быть, есть и другие решения, но в этом случае я думаю, что вы должны использовать функции udf или sql