如何在 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}]|
+---------+------------------------------+
我有一个这样的案例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}]|
+---------+------------------------------+