如何在Scala中删除TextQualifier文件的双引号中的双引号和额外分隔符



我有很多带文本限定符的分隔文件(每列的开头和结尾都有双引号)。分隔符不一致,即可以有任何分隔符,如逗号(,)、管道(|)、~、tab(\t)。

我需要用spark.read.textFile(单列)读取此文件,然后删除文本限定符和双引号中的分隔符(需要用空格替换分隔符)。在这里,我想做的是不考虑列,即我不应该分裂成列

下面是包含3列ID、Name和DESC的测试数据。DESC列有额外的分隔符。

val y = """4 , "XAA" , "sf,sdnsdfsf""""
val pattern = """"[^"]*(?:""[^"]*)*"""".r
val output = pattern replaceAllIn (y, m => m.group(0).replaceAll("[,n]", " "))

我得到了上面的代码,它适用于静态值。但是我不能申请DF。

"ID","Name","DESC">
"1","ABC","A,B C">
"2","XYZ","ABC很麻烦">
"3","YYZ","FER"sfsf,sfd f">
4,"XAA","sf,sd sdfsf">

我需要作为输出

ID,名称,DESC
1,ABC,A B C
2,XYZ,ABC是麻烦
3,YYZ,FER"sfsf sfd f
4,XAA,sf sd sdfsf

提前感谢。

已解决

var SourceFile = spark.read.textFile("/data/test.csv")
val SourceFileDF= SourceFile.withColumn("value", RemoveQualifier(col("value")))
def RemoveQualifier = udf((RawData:String)=>
{
var Data = RawData
val pattern = """"[^"]*(?:""[^"]*)*"""".r
Data  = pattern replaceAllIn (Data , m => m.group(0).replaceAll("[,]", " "))
Data 
})

谢谢。

您可以像这样使用两个replaceAll():

val output = pattern replaceAllIn (y, m => m.group(0).replaceAll("[,\\n]", " ").replaceAll(""|"", ""))

输出:字符串=4,XAA,sf-sd-sdfsf-

最新更新