2016-11-08 3 views
1

私は属性に集計(例えば、正規のカウント)を行うことに興味を持って次の属性があります。2つの列を1つのようにキューブする方法は?

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

私はデータフレームにキューブを使用して、して、グループ内の属性のすべての可能な組み合わせに興味をそれを達成するのに役立つだろう。ここ

しかし、キャッチです:これを達成するために、私はキューブ(年齢、市とロールアップ(カテゴリ、サブカテゴリ)を結合する必要があるので、サブカテゴリは、カテゴリせずに任意の意味をなさない。教育...)。

これを行う方法?

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 'はグループ内に存在せず、集約関数でもありません。あなたが得た価値を気にしない場合は、グループに追加するか、最初の()(または最初の値)で囲みます。

+0

サンプルデータ、試したコード、予想される出力を共有することで、再現可能な例を提供してください。 – mtoto

+0

@Srdjan Nikitovic:窓関数を試しましたが、これはあなたを助けるかもしれませんか? – Shankar

+0

@Shankarウィンドウ関数がどのようにして私にこれを助けることができるかわかりません... –

答えて

0

私はあなたが1として2つの列を組み合わせて、上cubeにそれを使用するstructまたはexpr機能で欲しいものを考える

次のようになるだろうstruct

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

exprで、それはすなわち

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

、 "純粋な" SQLを使用したのと同じくらい簡単だ。しかし、私はちょうどを推測しています。..

関連する問題