如何使用Scala在Spark中聚合数据?

如何使用Scala在Spark中聚合数据?,scala,apache-spark,apache-spark-sql,spark-dataframe,scala-collections,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,Scala Collections,我有一个数据集test1.txt。它包含如下数据 2::1::3 1::1::2 1::2::2 2::1::5 2::1::4 3::1::2 3::1::1 3::2::2 我已经用下面的代码创建了数据帧 case class Test(userId: Int, movieId: Int, rating: Float) def pRating(str: String): Rating = { val fields = str.split("::") assert(fields.size =

我有一个数据集
test1.txt
。它包含如下数据

2::1::3
1::1::2
1::2::2
2::1::5
2::1::4
3::1::2
3::1::1
3::2::2
我已经用下面的代码创建了数据帧

case class Test(userId: Int, movieId: Int, rating: Float)
def pRating(str: String): Rating = {
val fields = str.split("::")
assert(fields.size == 3)
Test(fields(0).toInt, fields(1).toInt, fields(2).toFloat)
}

val ratings = spark.read.textFile("C:/Users/test/Desktop/test1.txt").map(pRating).toDF()
2,1,3
1,1,2
1,2,2
2,1,5
2,1,4
3,1,2
3,1,1
3,2,2
但我想打印如下输出,即删除重复组合,而不是
字段(2)值1,1,2.0的值和

1,1,2.0
1,2,2.0
2,1,12.0
3,1,3.0
3,2,2.0   

请在这方面帮助我,如何实现这一点。

要删除重复项,请使用
df.distinct
。要先聚合您的
groupBy
,然后聚合
agg
。综上所述:

ratings.groupBy("userId","movieId").sum(rating) 
案例等级(userId:Int,movieId:Int,等级:Float)
def pRating(str:String):额定值={
val fields=str.split(“:”)
断言(fields.size==3)
评级(字段(0).toInt,字段(1).toInt,字段(2).toFloat)
}
val ratings=spark.read.textFile(“C:/Users/test/Desktop/test1.txt”).map(pRating)
val总计=额定值。不同
.groupBy('userId',movieId)
.agg(总额(‘评级’).as(‘评级’)
.as[评级]

我不确定您是否希望最终结果为
Dataset[Rating]
,以及
distinct
sum
逻辑是否与您希望的完全一致,因为问题中的示例并不十分清楚,但希望这能满足您的需要。

dataframe.groupBy(“column1”,“column2”).sum(“column3”)该代码不满足删除重复行的要求。在
groupBy
之前需要
distinct