如何在值内转义分隔符

w1jd8yoj  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(461)

我在值中转义分隔符时遇到了一个问题。我的代码读取一个psv文件。最近我得到了定界符 | (带转义符) \ )在其中一列值中。因为这个问题,记录被删除了。请看下面的问题。
记录

abcd|1234|222\|3344|count|33 

abcd|1234|111\|5566|count|44

在这个文件中,分隔符是 | 第3列的有效值为 222|3344 以及 111|5566 分别。
我使用以下语法来读取文件。

df_input=spark.read.format("csv").option("delimiter","|")..option("escape", "\\").load(var_files_path +"/*.psv" , schema=input_schema)```

When I read, a few records were skipped because of the delimiter inside the value. Can you please guide me to solve this issue. TIA.
iecba09b

iecba09b1#

假设pyspark使用python的csv模块,那么 quotechar" ,这提供了excel如何在csv中定义引号的线索:用引号字符将值字符串括起来。在单个字符前面加前缀不是转义序列。
在python控制台中尝试以下操作:

>>> import csv
>>> import io

>>> i = io.StringIO('abcd|1234|"222|3344"|count|33')
>>> r = csv.reader(i, delimiter='|')
>>> r.__next__()
['abcd', '1234', '222|3344', 'count', '33']

>>> i = io.StringIO(r'abcd|1234|\222|3344\|count|33')
>>> r = csv.reader(i, delimiter='|', quotechar='\\')
>>> r.__next__()
['abcd', '1234', '222|3344', 'count', '33']

psv格式通常用于管道字符不会出现在数据中的情况,因此不需要引用。在您的情况下,制表符分隔值(tsv)可能更容易。

相关问题