如何在 spark scala 中用换行符替换双引号?

问题描述 投票:0回答:1

我是新的火花。我有一个巨大的文件,其中有数据,如 - 。

18765967790@18765967790@T@20130629@00@31@2981546 " "18765967790@18765967790@T@20130629@19@18@3240165 " "18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 " "13478756094@13478756094@T@20130629@19@18@1230206 " "13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 " "40072066693@40072066693@T@20130629@79@18@3276502 " "40072066693@40072066693@T@20130629@19@07@3321860

我试图将""替换成新的行字符,这样我的输出就会像这样-------。

18765967790@18765967790@T@20130629@00@31@2981546 
18765967790@18765967790@T@20130629@19@18@3240165 
18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 
13478756094@13478756094@T@20130629@19@18@1230206 
13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 
40072066693@40072066693@T@20130629@79@18@3276502 
40072066693@40072066693@T@20130629@19@07@3321860

我试过...

val fact1 =  sc.textFile("s3://abc.txt").map(x=>x.replaceAll("\"","\n"))

但这似乎并不奏效。谁能告诉我缺少什么?

编辑1-我的最终输出将是一个带模式的数据框架,在用分隔符"@"分割后施加。

我得到的是下面的 op-

scala> fact1.take(5).foreach(println)
18765967790@18765967790@T@20130629@00@31@2981546

18765967790@18765967790@T@20130629@19@18@3240165

18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701

13478756094@13478756094@T@20130629@19@18@1230206

13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246

40072066693@40072066693@T@20130629@79@18@3276502

40072066693@40072066693@T@20130629@19@07@3321860

我得到了额外的空行,这进一步困扰着我创建数据框架。这可能看起来很简单,但文件很大,而且包含""的行也很长,我在问题中只放了两个双引号,但它们可以有超过40-50个数字。在问题中,我只放了2个双引号,但他们可以超过40-50的数字。

scala apache-spark apache-spark-sql rdd
1个回答
1
投票

文本之间有多个引号,这是在制造多个换行符。您需要在替换前删除额外的引号,或者在替换后删除空行。

.map(x=>x.replaceAll("\"","\n").replaceAll("(?m)^[ \t]*\r?\n", ""))

参考: 删除所有空行


0
投票

你可能缺少隐式编码器,你可以试试下面的代码。

spark.read.text("src/main/resources/doubleQuoteFile.txt").map(row => {
      row.getString(0).replace("\"","\n") // looking to replace " " with next line
      row.getString(0).replace("\" \"","\n") // looking to replace " " with next line
    })(org.apache.spark.sql.Encoders.STRING)
© www.soinside.com 2019 - 2024. All rights reserved.