模式
SQLSpark DataFrame API
PS: 不会涉及机器学习相关内容, 为比较传统的数据统计
概要
SQLSpark DataFrame APIDataFrame API
模式: 聚合 (Aggregation)
数据统计分析
以小见大
聚合语句: Group By, Rollup, Cube
Group ByRollupCubeGroup By
RollupCube
CubeRollup国家,省份,城市,区国家省份城市区Rollup
Spark DataFrame API
聚合函数
Spark DataFrame APIHyperLogLogapproxCountDistinct
函数 | 作用 | SQL | Spark DataFrame API |
---|
模式: 关联分析 (Association Analysis)
SQL JOIN
同步锁
- 降低 JOIN 操作意味着冗余字段存储, 在宽表情况下, 这样的冗余成本可能是不可接受的
- 对数据规模比较小的情况(经过了聚合), JOIN 性能可以接受
JOIN 有非常多样式(7种或者更多), LEFT JOIN, INNER JOIN, RIGHT JOIN ... 经常用的有下面几种:
LEFT JOINcntFULL JOIN
JOIN 操作当然是级联的, 经常可以见到下面的 SQL:
JoinGroup By + JoinStruct + Pointer
模式: 多维度分析(Multi-dimensional Analysis) 与 细分分析 (Subdivision Analysis)
多维度分析细分分析
多维度分析
前面说过, 多维度分析实际上是聚合操作, Group By/Rollup/Cube 可以根据情况选择使用。
维度灾难
细分分析
bucketsGROUP BY bucket
这样会有什么好处么 ? (仅适用对于不需要进行下钻分析的场景)
- 代码可维护性好, 想要增加一种细分, 只要往 buckets append 对应的标签值就好 (可能并不需要改大数据计算部分)
- 出库数据量小
模式: 序列分析 (Series Analysis)
序列分析Sankey(桑基)Funnel(漏斗)
Series 切分
Group BySeries Window
常用的序列切分方式有:
[A,B,D,C,F,E,G][A,B,D,C,F,E,G][A,B,D,C][B,D,C,F][D,C,F,E][C,F,E,G][F,E,G][E,G][G]
可以看到, 在固定长度滑动切分中,在达到终点时, 又继续移动,原因:
Series Window
Sankey(桑基)
桑基是观察用户行为路径的有效手段。
其数据结构抽象有多种方式, 我们抽象为两个表: SankeyNodes: start_node(对应桑吉图起点), node(对应桑基图节点), cnt SankeyLinks: start_node(对应桑吉图起点), node_from(起始节点), node_to(结束节点), cnt
计算大致分为下面几步(不包括剪枝):
NN-1
如果要剪枝, 计算会复杂不少:
NN-1
Funnel(漏斗)
任意项
start_node | path | cnt -- | -- A | [A,B,C,D] | [1432,123,45,23] A | [A,B,C,E] | [1432,123,45,22] E | [E,B,D,C] | [1678,198,56,24] ... | ...
模式: 产品运营分析 (PO Analysis)
产品运营领域产生了众多的指标(PV/UV/新增用户数/用户留存回流等),其甚至可以独立为一种数据分析模式
时间,用户ID
一些指标相当简单,例如:
- UV
- PV
日新增用户
我们可能会维护下面几张表:
user_sourceuser_historyuser_delta
模式: 剪枝 (Prune)
剪枝是大数据分析经常进行的操作, 目的是预防输出集过分庞大降低后续的查询/存储效能
剪枝总体遵循以下原则:
- 剪枝后数据不丧失可用性 (不能损失重要的特征)
- 剪枝后数据量可以预估上限
- 可以解释的剪枝规则,简单明了
方案: Top
取 Topcount
ORDER BY XXX LIMIT N
方案: Rank With Window Function
Top
Rank 函数就会精细很多,并且可以计算几份 Rank 组合判定
Rank 函数一般和 Window Function 组合使用, 尤其是 over (partition by XXX)
举例:
a
SQL 方案
Spark DataFrame API 与 SQL 是类似的
方案: Rank && Others
标记为其他
- 对某一维度, 计算 Rank, 当其大于阈值时, 改写维度的值为 OTHERS 常量
- 对改写后的表再次进行聚合操作, 影响程度低的维度便会被折叠到 OTHERS 维度
模式: 数据清理 (Data Cleaning)
去重
a
SQL 去重方案
Spark DataFrame API 去重方案
阈值
SQLSpark DataFrame API
percentile/approxQuantile
处理空值
SQLSpark DataFrame API
模式: 模糊计算 (Fuzzy calculation)
计算时间复杂度
HyperLogLogcount distinct抽样法
模糊计算一般分为下面的步骤:
变换逆变换
模式: 一些辅助措施
窗口函数
- lead
- lag