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

How to aggregate data in Spark using Scala?

我有一个数据集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

但我想打印如下所示的输出,即删除重复的组合而不是 field(2) value sum of values1,1, 2.0.

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

请帮我解决这个问题,如何实现。

ratings.groupBy("userId","movieId").sum(rating) 

要删除重复项,请使用 df.distinct。先聚合你groupBy再聚合你agg。把这些放在一起:

case class Rating(userId: Int, movieId: Int, rating: Float)

def pRating(str: String): Rating = {
  val fields = str.split("::")
  assert(fields.size == 3)
  Rating(fields(0).toInt, fields(1).toInt, fields(2).toFloat)
}

val ratings = spark.read.textFile("C:/Users/test/Desktop/test1.txt").map(pRating)
val totals = ratings.distinct
  .groupBy('userId, 'movieId)
  .agg(sum('rating).as("rating"))
  .as[Rating]

我不确定您是否希望最终结果如 Dataset[Rating] 以及 distinctsum 逻辑是否与您想要的完全一样问题不是很清楚,但希望这会为您提供所需的信息。