<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Combinational agg over multi-dimensional table in Archives of Support Questions (Read Only)</title>
    <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116414#M42884</link>
    <description>&lt;P&gt;Hello.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;With this table,&lt;/STRONG&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Event&lt;/TD&gt;&lt;TD&gt;User&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#1&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;#1&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#2&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#3&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;It is simple to get 3-dimension olap cube data by&lt;/P&gt;&lt;PRE&gt;select country, gender, event, count(*), count(distinct userId) from TABLE group by country, gender, event

&lt;A href="https://forums.databricks.com/questions/956/how-do-i-group-my-dataset-by-a-key-or-combination.html" target="_blank"&gt;https://forums.databricks.com/questions/956/how-do-i-group-my-dataset-by-a-key-or-combination.html&lt;/A&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;But it's result is not what I expected.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;What I've already done by Hadoop-M/R Jobs is like below.&lt;/P&gt;&lt;P&gt;- every combination of dimensions should be calculated.&lt;/P&gt;&lt;P&gt;- each condition have two metric :  &lt;/P&gt;&lt;P&gt;  - count(*) AND count(distinct userId)&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Event&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Event Count&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;User Count&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;
&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I have successfully did it with hadoop mapreduce.&lt;/P&gt;&lt;P&gt;&lt;U&gt;But. As raw data size getting large MR job takes too long time.!!!!&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;U&gt;( 300 millions logs takes 6 hours )&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Of course it can be generated by multiple spark sql queries&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;- but we have 5~10  dimensions in real world.&lt;/P&gt;&lt;P&gt;- and It's cost seems not cheep two.&lt;/P&gt;&lt;PRE&gt;# 1 dimensions
select country, count(*), count(distinct userId) from TABLE group by country
select gender, count(*), count(distinct userId) from TABLE group by gender
select event, count(*), count(distinct userId) from TABLE group by event

# 2 dimensions
select country, event, count(*), count(distinct userId) from TABLE group by country, event
select country, gender, count(*), count(distinct userId) from TABLE group by country, gender
select gender, event, count(*), count(distinct userId) from TABLE group by gender, event

# 3 dimensions
select country, gender, event, count(*), count(distinct userId) from TABLE group by country, gender, event&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;So I consider to convert this MR job to Spark's something.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I have never found some examples fit to solve this problem.&lt;/P&gt;&lt;P&gt;Is there any good reference about this kind works? Any Idea?&lt;/P&gt;&lt;P&gt;( I know Druid provide similar function to this but is is not an option for us for some reasons.)&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
    <pubDate>Thu, 06 Oct 2016 15:47:33 GMT</pubDate>
    <dc:creator>jeesim2</dc:creator>
    <dc:date>2016-10-06T15:47:33Z</dc:date>
    <item>
      <title>Combinational agg over multi-dimensional table</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116414#M42884</link>
      <description>&lt;P&gt;Hello.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;With this table,&lt;/STRONG&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Event&lt;/TD&gt;&lt;TD&gt;User&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#1&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;#1&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#2&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;#3&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;It is simple to get 3-dimension olap cube data by&lt;/P&gt;&lt;PRE&gt;select country, gender, event, count(*), count(distinct userId) from TABLE group by country, gender, event

&lt;A href="https://forums.databricks.com/questions/956/how-do-i-group-my-dataset-by-a-key-or-combination.html" target="_blank"&gt;https://forums.databricks.com/questions/956/how-do-i-group-my-dataset-by-a-key-or-combination.html&lt;/A&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;But it's result is not what I expected.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;What I've already done by Hadoop-M/R Jobs is like below.&lt;/P&gt;&lt;P&gt;- every combination of dimensions should be calculated.&lt;/P&gt;&lt;P&gt;- each condition have two metric :  &lt;/P&gt;&lt;P&gt;  - count(*) AND count(distinct userId)&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Event&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Event Count&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;User Count&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;-&lt;/TD&gt;&lt;TD&gt;
&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;IN&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I have successfully did it with hadoop mapreduce.&lt;/P&gt;&lt;P&gt;&lt;U&gt;But. As raw data size getting large MR job takes too long time.!!!!&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;U&gt;( 300 millions logs takes 6 hours )&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Of course it can be generated by multiple spark sql queries&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;- but we have 5~10  dimensions in real world.&lt;/P&gt;&lt;P&gt;- and It's cost seems not cheep two.&lt;/P&gt;&lt;PRE&gt;# 1 dimensions
select country, count(*), count(distinct userId) from TABLE group by country
select gender, count(*), count(distinct userId) from TABLE group by gender
select event, count(*), count(distinct userId) from TABLE group by event

# 2 dimensions
select country, event, count(*), count(distinct userId) from TABLE group by country, event
select country, gender, count(*), count(distinct userId) from TABLE group by country, gender
select gender, event, count(*), count(distinct userId) from TABLE group by gender, event

# 3 dimensions
select country, gender, event, count(*), count(distinct userId) from TABLE group by country, gender, event&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;So I consider to convert this MR job to Spark's something.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I have never found some examples fit to solve this problem.&lt;/P&gt;&lt;P&gt;Is there any good reference about this kind works? Any Idea?&lt;/P&gt;&lt;P&gt;( I know Druid provide similar function to this but is is not an option for us for some reasons.)&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 06 Oct 2016 15:47:33 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116414#M42884</guid>
      <dc:creator>jeesim2</dc:creator>
      <dc:date>2016-10-06T15:47:33Z</dc:date>
    </item>
    <item>
      <title>Re: Combinational agg over multi-dimensional table</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116415#M42885</link>
      <description>&lt;P&gt;Add "WITH ROLLUP" or "WITH CUBE" to the end of the query, like:&lt;/P&gt;&lt;PRE&gt;select country, gender,event, count(*), count(distinct userId)from TABLE groupby country, gender,event WITH ROLLUP&lt;/PRE&gt;&lt;P&gt;or&lt;/P&gt;&lt;PRE&gt;select country, gender,event, count(*), count(distinct userId)from TABLE groupby country, gender,event WITH CUBE&lt;/PRE&gt;</description>
      <pubDate>Thu, 06 Oct 2016 20:29:08 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116415#M42885</guid>
      <dc:creator>clukasik</dc:creator>
      <dc:date>2016-10-06T20:29:08Z</dc:date>
    </item>
    <item>
      <title>Re: Combinational agg over multi-dimensional table</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116416#M42886</link>
      <description>&lt;P&gt;OMG.&lt;/P&gt;&lt;P&gt;"With Rollup" is definitely what I need.&lt;/P&gt;&lt;P&gt;I have never seen this query option.&lt;/P&gt;&lt;P&gt;Looks almost sql engines supports that.&lt;/P&gt;&lt;P&gt;Great thanks.&lt;/P&gt;</description>
      <pubDate>Thu, 06 Oct 2016 20:55:10 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116416#M42886</guid>
      <dc:creator>jeesim2</dc:creator>
      <dc:date>2016-10-06T20:55:10Z</dc:date>
    </item>
    <item>
      <title>Re: Combinational agg over multi-dimensional table</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116417#M42887</link>
      <description>&lt;P&gt;By any chance,&lt;/P&gt;&lt;P&gt;Does OLAP functions(cube,rollup,grouping sets) supports only HiveSqlContext in SparkSQL?&lt;/P&gt;&lt;PRE&gt;scala&amp;gt; sql=new org.apache.spark.sql.SQLContext(sc)
scala&amp;gt; var json_df = sql.read.json("/data/jpl/band/2016/10/06/raw_json_tiny/*/*")
scala &amp;gt; json_df.registerTempTable("json_tb")
scala&amp;gt; var result = sql.sql("select service_id, product, os_name, action_id, classifier, language, country, app_ver, count(*), count(distinct device_id), count(distinct user_key) from json_tb group by service_id, product, os_name, action_id, classifier, language, country, app_ver with rollup")

java.lang.RuntimeException: [1.253] failure: ``union'' expected but `with' found
&lt;/PRE&gt;</description>
      <pubDate>Fri, 07 Oct 2016 08:49:52 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116417#M42887</guid>
      <dc:creator>jeesim2</dc:creator>
      <dc:date>2016-10-07T08:49:52Z</dc:date>
    </item>
    <item>
      <title>Re: Combinational agg over multi-dimensional table</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116418#M42888</link>
      <description>&lt;P&gt;With spark 1.6&lt;/P&gt;&lt;P&gt;rollup/cube/groupingsets are not possible by query syntax but possible dataframe api.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;this works.&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE&gt;var agg_result = json_df.select("scene_id","action_id","classifier","country","os_name","app_ver","user_key","device_id").cube("scene_id","action_id","classifier","country","os_name","app_ver").agg(count("user_key"), countDistinct("user_key"), countDistinct("device_id"))
&lt;/PRE&gt;</description>
      <pubDate>Fri, 07 Oct 2016 09:42:41 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Combinational-agg-over-multi-dimensional-table/m-p/116418#M42888</guid>
      <dc:creator>jeesim2</dc:creator>
      <dc:date>2016-10-07T09:42:41Z</dc:date>
    </item>
  </channel>
</rss>

