如何在Spark/Scala中汇总数据集的列?
我是Spark/Scala的新手。我有一个包含许多列的数据集,每列都有一个列名。给定几个列名(这些列名不是固定的,它们是动态生成的),我需要对这些列的值求和。有没有一种有效的方法 我通过使用for循环找到了一种方法,但我不认为它是有效的:如何在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
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.