【发布时间】:2022-12-17 03:10:15
【问题描述】:
我有一个包含“id”列和“publication”列的数据框。 “id”列包含重复项,代表研究人员。 “发表”栏包含研究人员发表的学术著作的一些信息。
我想转换此数据框以将出版物收集到一个数组中,从而减少行数。我可以使用 groupBy 和 collect_list 来做到这一点。这将使“id”列只包含唯一值。
myDataframe
.groupBy("id")
.agg(
collect_list("publication").as("publications")
).select("id", "publications")
但是,就我的目的而言,一行的数据太多了。我想限制收集的出版物数量,并将数据分成多行。
让我的数据框看起来像这样,其中 1 的 id 出现在 10 行中:
| id | publication |
| ----| -------------- |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 2 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
| 1 | "foobar" |
我想 groupBy id 并将出版物收集到列表中,但将其限制为每组最多 5 个出版物:
| id | publication |
| ----| -------------- |
| 1 | ["foobar",...] |
| 1 | ["foobar",...] |
| 2 | ["foobar"] |
我将如何在 spark scala 中完成此操作?
【问题讨论】:
标签: scala apache-spark