Spark - 读取带引号的 csv 文件

Spark - Read csv file with quotes

提问人:Mariano Cacchiarelli 提问时间:10/27/2023 最后编辑:wernerMariano Cacchiarelli 更新时间:10/30/2023 访问量:37

问:

我们在 csv 文件中包含以下内容:

DI_SEQUENCE_NUMBER;DI_OPERATION_TYPE;MANDT;SPRAS;MVGR2;BEZEI;SRC_SYSTEM;LOAD_DATE;ODQ_CHANGEMODE;ODQ_ENTITYCNTR
76;"I";"220";"E";"200";"SAUGNAPF:BX75P:30/60M.FILT;G3/8""AU1/8"";"D16";"20231017T114626";"C";1
77;"I";"220";"E";"201";"COMPOTS AND FRUIT DRINKS";"D16";"20231017T114626";"C";1

第 76 行导致了问题,我们找不到正确的选项来正确读取。导致问题的部分是“SAUGNAPF:BX75P:30/60M。菲尔特;G3/8“”AU1/8“”。生成此csv文件的系统原始文本是SAUGNAPF:BX75P:30/60M。菲尔特;G3/8“”AU1/8”。

我们尝试了: 选项(“引用”, “”“) 选项(“转义”,“”“)

但没有运气

我们尝试了: 选项(“引用”, “”“) 选项(“转义”,“”“)

我们希望将其作为输出

1

csv apache-spark 双引号

评论


答:

0赞 Rushikesh 10/28/2023 #1

quote在这种情况下,选项似乎不起作用。我读取数据时没有任何显示列值的选项,例如:escape

“SAUGNAPF:BX75P:30/60M。菲尔特;G3/8“”AU1/8“”

为了删除开头和结尾引号,我使用了regexp_replace。

spark.read.csv(sep=";", header=True, path=<file_path>) \
     .withColumn("BEZEI", f.regexp_replace("BEZEI", "^[\"]|[\"]$", ''))
0赞 shalnarkftw 10/30/2023 #2

我认为您在设置选项时需要转义双引号:

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

如果您有包含多行的数据,则需要添加.option("multiline", True)

如果字段值之间有额外的空格,则还应添加

.option("ignoreLeadingWhiteSpace", true)

我希望它对你有用。