我有很多具有文本限定符的分隔文件(每列開始和結尾都有雙引號)。分隔符不一致,即可以有任何分隔符,如逗號(,),管道(|),〜,選項卡(\ t)。如何用Scala中的TextQualifier文件的雙引號刪除雙引號和額外分隔符
我需要使用spark.read.textFile
(單列)讀取此文件,然後用雙引號刪除文本限定符以及分隔符(需要用空格替換分隔符)。在這裏,我想要考慮列,即我不應該分爲列
以下是具有3列ID,名稱和DESC的測試數據。 DESC列有額外的分隔符。
val y = """4 , "XAA" , "sf,sd\nsdfsf""""
val pattern = """"[^"]*(?:""[^"]*)*"""".r
val output = pattern replaceAllIn (y, m => m.group(0).replaceAll("[,\n]", " "))
我上面的代碼工作正常的靜態值。但我無法向DF申請。
「ID」, 「名稱」, 「DESC」
「1」, 「ABC」, 「A,BC」
「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
})
感謝。
避免重用變量用於保持更比一個值。這是誤導。 –