Spark Dataframe:如何聚合数字列和名义列

Spark Dataframe: How to aggregate both numerical and nominal columns

我正在使用 Spark Dataframes 并且有与此类似的数据帧 df

id: String | amount: Double | donor: String
--------------------------------------------
1          | 50             | Mary
2          |100             | Michael
1          | 60             | Minnie
1          | 20             | Mark
2          | 55             | Mony

我想一次性聚合我的数据框并获得此输出:

id: String | amount: Double | donor: Seq[String]
--------------------------------------------
1          |130             | {Mary,Minnie,Mark}
2          |155             | {Michael, Mony}

所以我想做类似的事情:

df.groupyBy("id").agg(sum("amount"),_?Seq?_("donor"))

聚合数字的总和很容易,但我找不到将文本内容聚合为序列或数组(或可迭代的任何类似类型)的方法。我如何在 scala/spark 中执行此操作?

编辑:

我正在寻找一些基于 spark Dataframe 或 RDD 的函数来收集字符串。下面提到的函数 collect_set 是基于 Hive 的,我需要特定的依赖项。但是我在我的项目中根本没有使用 Hive。

尝试:

df.groupyBy("id").agg(sum("amount"), collect_list("donor"))

df.groupyBy("id").agg(sum("amount"), collect_set("donor"))