如何在 apache spark 中按键分组

How to group by key in apache spark

我有一个这样的案例class

   case class Employee(name: String, id: Int) 

我想要一个看起来像地图的数据集 ---> 键和值列表,即

   Dataset[String, List[Employee]]

我的用例是我应该将同名员工的 ID 分组。 Spark 中是否有运算符可以做到这一点。

有了数据集就这么简单:

val data = Seq(
  Employee("john doe", 1),
  Employee("john doe", 2),
  Employee("john doe2", 2)
)

val ds = spark.sparkContext.parallelize(data).toDS()

val resultDS: Dataset[(String, List[Employee])] =
  ds.groupByKey(_.name).mapGroups { case (k, iter) => (k, iter.toList) }

resultDS.show(false)

它给出:

+---------+------------------------------+
|_1       |_2                            |
+---------+------------------------------+
|john doe2|[{john doe2, 2}]              |
|john doe |[{john doe, 1}, {john doe, 2}]|
+---------+------------------------------+