在pyspark中读取管道分隔文件时如何处理管道和转义字符

wbrvyc0a  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(583)

我有一个管道分隔的文件。如何处理内容中的反斜杠和管道
这是输入

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
kokeuurv

kokeuurv1#

你已经宣布 escape 两次。但是,一个数据集只能定义一次属性。您只需要定义一次。

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

默认情况下 escape\ 如果未定义(请链接此处)。
您已将引号字符定义为 " . 转义字符用于转义引号字符。例如 "show this \"" 会屈服的 show this " 如果引号字符是 " 逃跑是 \ .
对于这个特定的示例,您需要 escape 控制字符,例如 # 或任何不出现在引号字符前的值 " . 因此你不能使用 | 如第1行的报价前所示。你也不能用 \ 如第2行报价前所示。
必须为指定一个值 escape 由于默认值为 \ . 这将为你打破2号线。

相关问题