模式
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
函数作用SQLSpark 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

collect_list/explode 组合