如何在Hadoop堆栈中聚合数据?

时间:2017-03-01 23:32:08

标签: apache-spark apache-spark-sql aggregate

我想将数据汇总到" buckets"通过一些任意标准(如ElasticSearch,而不是Hive bucketing)。

我认为,解释我想要完成的事情的最佳方式是将其呈现在数据上,所以:

基本问题:

第1步

我已经获得了这种结构的数据(目前已导入HIVE ORC表):

id | category | subcategory | value
1    foo        bar           3
3    foo        bar           5
5    foo2       bar1          7
6    foo        bar2          1
9    foo2       bar           5
11   foo        bar           10

现在我想按ID分组数据,桶大小为5,所以我实现了:

第2步

bucket_no | id | category | subcategory | value
1           1    foo        bar           3
            3    foo        bar           5
            5    foo2       bar1          7
2           6    foo        bar2          1
            9    foo2       bar           5
3           11   foo        bar           10

所以我得到了3个桶。这导致我

高级问题:

在(或可能在之后)步骤#2我想对存储桶执行一些操作,例如找到每个类别的平均值:

第3步

bucket_no | category  | AVG(value)
1           foo         4
            foo2        7
2           foo         1
            foo2        5
3           foo         

好的,回到#2,我知道我可以按FLOOR(id%5)对数据进行分组,然后按类别进行分组,得到有价值的AVG(我坚持SQL的方式)思考,因为我熟悉它的技术),以这些数据结束会让我部分满意,但我想知道如何创建分块聚合和哪些工具(HIVE,Spark或也许应该使用其他),所以我可以解决现实问题:

第4步

我从步骤#1获得了数据,按ID排序。现在我将我的桶尺寸改为11.我想:

  1. 找到一个类别,我们称之为X
  2. 根据(X.id-5)> = id< =(X.id +5)
  3. 的数据创建存储桶
  4. 查找存储桶中每个子类别的平均值
  5. 创建对子类别列表:AVG(值)并将它们与类别(子桶)连接
  6. 删除在步骤2中找到的所有数据,以确保它们不会在另一个存储桶中重复
  7. 重复,直到处理并清除所有数据
  8. 我的最终结果,我想要实现的应该是这样的:

    第5步

    bucket_no | category | subcategory | AVG(value)
    1           foo        bar           4
    2           foo2       bar1          7
                           bar           5
    3           foo        bar2          1
    4           foo        bar           10
    

0 个答案:

没有答案