在 PySpark 中读取管道分隔文件时如何处理管道字符和转义字符
How to handle Pipe and escape characters while reading pipe delimited files in PySpark
我有一个竖线分隔的文件。如何处理内容中的反斜杠和管道
这是输入
col1|col2|col3|col4
123|"\|"|""|2020.01.31 12:00:30
456|"\"|""|2020.01.31 12:00:30
678|"|"|""|2020.01.31 12:00:30
我尝试了以下选项
data = spark.read.format("com.databricks.spark.csv")\
.option("inferSchema", "true")\
.option('header','true')\
.option('delimiter','|')\
.option("quote", '"')\
.option("escape","|")\
.option("escape", "\")\
.option("timestampFormat", "yyyy.mm.dd hh:mm:ss")\
.load('s3://dummybucket/a.csv')
我得到的输出为
col1|col2|col3|col4
123|"\|"|""|2020-01-31T00:00:30.000Z
456|"\"|\""|2020-01-31T00:00:30.000Z|""
678|"|"|""|2020-01-31T00:00:30.000Z
预期输出
col1|col2|col3|col4
123|"\|"|""|2020-01-31T00:00:30.000Z
456|"\"|""|2020-01-31T00:00:30.000Z
678|"|"|""|2020-01-31T00:00:30.000Z
您已声明 escape
两次。但是,属性 只能为数据集定义一次。您只需要定义一次。
.option("escape","|") \
.option("escape", "\") \
默认情况下,如果未定义 escape
的值将为 \
(link here)。
您已将引号字符定义为 "
。转义字符用于转义引号字符。例如,如果引号字符为 "
且转义字符为 \
.
,则 "show this \""
将产生 show this "
对于此特定示例,您需要将 escape
更改为控制字符,例如 #
或任何未出现在引号字符之前的值"
。因此,您不能使用 |
,因为它出现在第 1 行的引号之前。您也不能使用 \
,因为它出现在第 2 行的引号之前。
您还必须为 escape
指定一个值,因为默认值为 \
。这将为您打破第 2 行。
我有一个竖线分隔的文件。如何处理内容中的反斜杠和管道
这是输入
col1|col2|col3|col4
123|"\|"|""|2020.01.31 12:00:30
456|"\"|""|2020.01.31 12:00:30
678|"|"|""|2020.01.31 12:00:30
我尝试了以下选项
data = spark.read.format("com.databricks.spark.csv")\
.option("inferSchema", "true")\
.option('header','true')\
.option('delimiter','|')\
.option("quote", '"')\
.option("escape","|")\
.option("escape", "\")\
.option("timestampFormat", "yyyy.mm.dd hh:mm:ss")\
.load('s3://dummybucket/a.csv')
我得到的输出为
col1|col2|col3|col4
123|"\|"|""|2020-01-31T00:00:30.000Z
456|"\"|\""|2020-01-31T00:00:30.000Z|""
678|"|"|""|2020-01-31T00:00:30.000Z
预期输出
col1|col2|col3|col4
123|"\|"|""|2020-01-31T00:00:30.000Z
456|"\"|""|2020-01-31T00:00:30.000Z
678|"|"|""|2020-01-31T00:00:30.000Z
您已声明 escape
两次。但是,属性 只能为数据集定义一次。您只需要定义一次。
.option("escape","|") \
.option("escape", "\") \
默认情况下,如果未定义
escape
的值将为\
(link here)。您已将引号字符定义为
,则"
。转义字符用于转义引号字符。例如,如果引号字符为"
且转义字符为\
."show this \""
将产生show this "
对于此特定示例,您需要将
escape
更改为控制字符,例如#
或任何未出现在引号字符之前的值"
。因此,您不能使用|
,因为它出现在第 1 行的引号之前。您也不能使用\
,因为它出现在第 2 行的引号之前。您还必须为
escape
指定一个值,因为默认值为\
。这将为您打破第 2 行。