Spark(Scala)用新值替换字符串中的所有值

时间:2018-07-27 05:49:57

标签: scala apache-spark

我是新手,试图将字符串的值替换为新值而感到震惊。

Data in URL="a=1,
b=2,
c=3"
var header="a,b,c"
for (line <- Source.fromURL("/u/r/l").getLines) {
     if(header.contains(line.split("=")(0).toLowerCase().trim)) {
       header.replaceAll(line.split("=")(0).toLowerCase().trim,line.split("=")(1).toLowerCase().trim)
     }
      }

我希望最终输出为

println(header)
1,2,3

在运行此程序时,如何仍能获得"a,b,c"

1 个答案:

答案 0 :(得分:1)

您所需要的只是分配为

for (line <- Source.fromURL("/u/r/l").getLines) {
     if(header.contains(line.split("=")(0).toLowerCase().trim)) {
       header = header.replaceAll(line.split("=")(0).toLowerCase().trim,line.split("=")(1).toLowerCase().trim)
     }
}

您可以像

一样在功能上做更多
Source.fromURL("/u/r/l").getLines.map(_.split("=")).map(line => header = header.replaceAll(line(0).toLowerCase().trim,line(1).toLowerCase().trim))

进一步,您可以将网址更改为Map并将映射应用为

val kv = Source.fromURL("/u/r/l").getLines.map(_.split("=")).map(x => (x(0).toLowerCase.trim, x(1).toLowerCase.trim)).toMap
header = header.split(",").map(x => if(kv.keySet.contains(x)) kv(x);else x).mkString(",")