Сначала давайте создадим фрейм данных:
import org.apache.spark.sql._
import org.apache.spark.sql.types._
val schema = List(
StructField("col1", IntegerType, true),
StructField("col2", IntegerType, true),
StructField("col3", IntegerType, true)
)
val data=Seq(Row(10,100,1000),Row(20,200,2000),Row(30,300,3000))
val df = spark.createDataFrame(spark.sparkContext.parallelize(data),StructType(schema))
df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 10| 100|1000|
| 20| 200|2000|
| 30| 300|3000|
+----+----+----+
Теперь у нас есть фрейм данных.
Мы можем использовать сопоставление с образцом при назначении значений для сбора желаемых результатов. Так как df.first()
возвращает Row
объект, мы можем сделать что-то вроде этого:
val cols = df.columns.toList
val sums = cols.map(c => round(sum(c),2).cast("double"))
val Row(sumCol1: Double, sumCol2: Double, sumCol3: Double) = df.groupBy().agg(sums.head, sums.tail:_*).first()
sumCol1: Double = 60.0
sumCol2: Double = 600.0
sumCol3: Double = 6000.0