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

Spark(Scala)用新值替换字符串中的所有值,scala,apache-spark,Scala,Apache Spark,我是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).toL

我是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)
     }
      }

当我运行此程序时,仍然得到
“a,b,c”

您所需要的只是分配为

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)
     }
}
再进一步,您可以将url更改为映射,并根据需要应用映射

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(",")
Source.fromURL("/u/r/l").getLines.map(_.split("=")).map(line => header = header.replaceAll(line(0).toLowerCase().trim,line(1).toLowerCase().trim))
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(",")