2016-10-03 154 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