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"))
我正在使用 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"))