2017-09-30 29 views
0

我想根據我在數據框中具有的所有列的組合來計算客戶數。火花數據框(所有組合)中的多列上的聚合

例如: - 假設我有5列的數據幀。

ID,COL1,COL2,COL3,CUST_ID

我需要的客戶的計數的所有組合:

id, col1, count(cust_id) 
    id, col1, col2, count(cust_id) 
    id, col1, col3, count(cust_id) 
    id, col1, col2, col3, count(cust_id) 
    id, col2, count(cust_id) 
    id, col2, col3, count(cust_id) 

等了所有的排列組合。

它很難做到單獨提供所有不同組合的數據框功能,然後聚合客戶數。

有沒有什麼辦法可以實現這一點,然後將所有結果合併到一個數據框中,以便我們可以將結果寫入一個輸出文件。

對我來說,它看起來有點複雜,真的很感激,如果任何人可以提供任何解決方案。請讓我知道是否需要更多細節。

非常感謝。

+0

謝謝勞爾,感謝你的幫助。將嘗試這一點,讓你知道 –

+0

嗨勞爾,是否有可能給立方體函數的東西像(col1,col2),(col3,col4)col兩套在多維數據集 –

回答

1

這是可能and it is called cube

df.cube("id", "col1", "col2", "col3").agg(count("cust_id")) 
    .na.drop(minNonNulls=3) // To exclude some combinations 

SQL版本還提供了一種GROUPING SET可以比.na.drop更有效。

+0

嗨勞爾,是否有可能給集Col的立方體函數像(col1,col2),(col3,col4)這樣的兩個集合在CUBE中 –