首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在值内转义分隔符

如何在值内转义分隔符
EN

Stack Overflow用户
提问于 2020-09-22 05:54:08
回答 2查看 298关注 0票数 0

我在转义值内的分隔符时遇到了一个问题。我的代码读取一个PSV文件。最近,我在其中一个列值中获得了分隔符| (带有转义字符\)。由于此问题,记录将被删除。请看下面的问题。

记录

代码语言:javascript
运行
复制
abcd|1234|222\|3344|count|33 

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

在这个文件中,分隔符是|,第三列的有效值分别是222|3344111|5566

我使用以下语法来读取该文件。

代码语言:javascript
运行
复制
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.
EN

回答 2

Stack Overflow用户

发布于 2020-09-22 11:34:27

假设pyspark使用Python的csv module,那么默认的quotechar",它提供了有关Excel如何在csv中定义引用的线索:用引用字符将值字符串括起来。它不是为单个字符添加前缀的转义序列。

在Python控制台中尝试以下操作:

代码语言:javascript
运行
复制
>>> 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)在您的情况下会更容易一些。

票数 0
EN

Stack Overflow用户

发布于 2021-10-27 20:30:10

solution使用rdd

代码语言:javascript
运行
复制
rdd1  = rdd.map(lambda x: x.replace("\\|", ""))

我自己也使用过rdd和Python regex

代码语言:javascript
运行
复制
import re
raw_string = r"(\\\|)"
rdd_cleaned = rdd.map(lambda x: re.sub(raw_string, "", x))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64000456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档