2016-11-08 55 views
1

我有屬性的下列屬性我感興趣的執行聚合(例如定期計數):如何將兩列上的立方體看作是一個立方體?

'category', 'sub-category', age, city, education... (around 10 more) 

我很感興趣,在組屬性的所有可能的組合,因此,使用dataframes 立方體函數可以幫助我實現這一點。

但這裏是一個問題:子類沒有任何意義,而不類,所以爲了實現這一目標,我需要彙總(類別,子類)與立方體(年齡,城市結合起來。教育...)。

如何做到這一點?

這是我試過,其中測試是我的表的名稱:

val data = sqlContext.sql("select category,'sub-category',age from test group by cube(rollup(category,'sub-category'), age)") 

,這是我得到的錯誤:

org.apache.spark.sql。 AnalysisException:表達式'測試。 category'既不在組中,也不是聚合函數。如果您不關心您獲得的是哪個價值,請將其添加到第一個()(或first_value)中。

+0

請提供一個可重現的示例,通過共享示例數據,您嘗試過的代碼和預期的輸出。 – mtoto

+0

@Srdjan Nikitovic:你有沒有嘗試窗口函數,它可能會幫助你呢? – Shankar

+0

@Shankar我沒有看到窗口函數如何幫助我... ... –

回答

0

認爲你想要的是structexpr功能兩列合併爲一體,並用它來cube上。

隨着struct這將會是如下:

df.rollup(struct("category", "sub-category") as "(cat,sub)") 

隨着expr這與使用 「純」 SQL一樣簡單,即

df.rollup(expr("(category, 'sub-category')") as "(cat,sub)") 

但我只是猜測...