2016-11-08 90 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)") 

但我只是猜测...