我是新的火花。我有一个巨大的文件,其中有数据,如 - 。
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的数字。
文本之间有多个引号,这是在制造多个换行符。您需要在替换前删除额外的引号,或者在替换后删除空行。
.map(x=>x.replaceAll("\"","\n").replaceAll("(?m)^[ \t]*\r?\n", ""))
参考: 删除所有空行
你可能缺少隐式编码器,你可以试试下面的代码。
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)