2016-10-03 155 views
0

我使用星火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"))

聚合数字之和很容易,但我找不到将文本内容聚合为序列或数组(或任何类似Iterable类型)的方法。我如何在scala/spark中做到这一点?

编辑:

我要寻找一些火花数据帧或基于RDD功能做字符串的集合。下面提到的函数collect_set是基于Hive的,我需要特定的依赖关系。但我在我的项目中完全没有使用Hive。

回答

2

尝试:

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

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

这工作就像一个魅力,但在哪个班,你找到'collect_set' \'collect_list'?我似乎无法在API中找到这些。除此之外,是否有办法确保集合只具有不同的值? – Mnemosyne

+0

我发现它并且collect_list是一个Hive函数。因为我没有使用Hive,是不是有原生的火花。 – Mnemosyne