有一个数据多维分析的任务:
- 日志的周UV;
- APP的收集量及标注量,TOP 20 APP(周UV),TOP 20 APP标注分类(周UV);
- 手机机型的收集量及标注量,TOP 20 机型(周UV),TOP 20 手机厂商(周UV);
初始的解决方案:Spark读取数据日志,然后根据分析需求逐一进行map、distinct、reduceByKey得到分析结果。但是,这种方案存在着非常大的缺点——重复扫描数据源多次。
1. Pig
Pig提供cube
关键字做OLAP,将dimension分为了两类:
- normal,对应于cube operation,\(n\)个该维度的组合数为\(2^n\);
- hierarchical ordering,对应于rollup operation, \(n\)个该维度的组合数为\(n+1\)。
官方doc例子如下:
salesinp = LOAD '/pig/data/salesdata' USING PigStorage(',') AS
(product:chararray, year:int, region:chararray, state:chararray, city:chararray