如何在Spark/Scala中汇总数据集的列?

如何在Spark/Scala中汇总数据集的列?,scala,sum,apache-spark,Scala,Sum,Apache Spark,我是Spark/Scala的新手。我有一个包含许多列的数据集,每列都有一个列名。给定几个列名(这些列名不是固定的,它们是动态生成的),我需要对这些列的值求和。有没有一种有效的方法 我通过使用for循环找到了一种方法,但我不认为它是有效的: val AllLabels = List("ID", "val1", "val2", "val3", "val4") val lbla = List("val1", "val3", "val4") val index_lbla = lbla.map(x =&g

我是Spark/Scala的新手。我有一个包含许多列的数据集,每列都有一个列名。给定几个列名(这些列名不是固定的,它们是动态生成的),我需要对这些列的值求和。有没有一种有效的方法

我通过使用for循环找到了一种方法,但我不认为它是有效的:

val AllLabels = List("ID", "val1", "val2", "val3", "val4")
val lbla = List("val1", "val3", "val4")
val index_lbla = lbla.map(x => AllLabels.indexOf(x))

val dataRDD = sc.textFile("../test.csv").map(_.split(","))

dataRDD.map(x=>
 {
  var sum = 0.0
  for (i <- 1 to index_lbla.length) 
    sum = sum + x(i).toDouble
  sum
 }
).collect

非常感谢你的帮助

您提到的
for
循环只是一些高阶函数的语法糖,如scala中的
map
。你可能想了解更多

在这种情况下,可以使用
映射
求和
替换for循环处理

dataRDD.map(x => index_lbla.map(i => x(i).toDouble).sum).collect

// note that this also fixes the error in selecting columns for summation in the original version.
dataRDD.map(x => index_lbla.map(i => x(i).toDouble).sum).collect

// note that this also fixes the error in selecting columns for summation in the original version.