我有以下属性,我对在属性上执行聚合(例如常规计数)感兴趣:
'category', 'sub-category', age, city, education... (around 10 more)
我对group by中属性的所有可能组合感兴趣,因此使用数据框 cube 函数可以帮助我实现这一目标。
但是这里有一个问题:子类别没有类别没有任何意义,所以为了实现这一点,我需要结合汇总(类别,子类别)与立方体(年龄,城市,教育......)。
怎么做?
这就是我尝试过的,其中 test 是我的表名:
val data = sqlContext.sql("select category,'sub-category',age from test group by cube(rollup(category,'sub-category'), age )")
这是我得到的错误:
org.apache.spark.sql.AnalysisException:表达式'test。
category
'既不存在于组中,也不是聚合函数。如果你不关心你获得哪个值,请添加到group by或wrap in first()(或first_value)。
答案 0 :(得分:0)
我认为你想要的是struct
或expr
个函数,将两列合并为一个,并将其用于cube
。
使用struct
,如下所示:
df.rollup(struct("category", "sub-category") as "(cat,sub)")
使用expr
就像使用"纯"一样简单SQL,即
df.rollup(expr("(category, 'sub-category')") as "(cat,sub)")
但我只是猜测 ...