
1) 【一句话结论】在电商平台用户行为分析项目中,通过数据清洗提升数据质量(缺失值过滤后数据完整性达98%,异常值处理后分析准确率提升1.5%),并采用分片+索引+缓存策略解决性能瓶颈,查询延迟从8秒降至2秒,任务处理时间从1.5小时缩短至30分钟。
2) 【原理/概念讲解】数据质量指数据在准确性、完整性、一致性、时效性等方面的缺陷(如缺失值、异常值、重复数据),直接影响分析结果的可靠性。性能瓶颈通常由数据量过大、计算复杂度高导致,表现为查询延迟高、任务超时。类比:数据质量好比加工原材料的“杂质”,杂质多则产品次;性能瓶颈好比机器“过载”,处理大量任务时卡顿。
3) 【对比与适用场景】
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据清洗(过滤缺失值) | 去除或填充缺失数据 | 简单,可能损失信息 | 数据量不大或缺失比例低 | 填充可能引入偏差 |
| 分片 | 按键或范围切分数据 | 分布式处理,减少单节点负载 | 大规模数据(如日志、用户行为) | 分片键选择影响负载均衡 |
| 索引 | 为数据建立索引 | 加速查询,增加存储 | 高频查询场景 | 索引维护成本 |
| 缓存 | 存储热点数据 | 减少重复计算,提升速度 | 热点数据(如用户画像、热门商品) | 缓存淘汰机制(如LRU) |
4) 【示例】假设项目处理电商日志(每天50GB),用Spark处理。步骤:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("UserBehaviorAnalysis").getOrCreate()
# 数据清洗
df = spark.read.json("ecommerce_logs")
df = df.filter("user_id is not null") # 过滤缺失
df = df.fillna({"purchase_amount": df.select("purchase_amount").agg({"purchase_amount": "median"}).first()[0]}) # 填充金额
# 3σ原则处理异常值
mean, std = df.select("purchase_frequency").agg({"purchase_frequency": "mean", "purchase_frequency": "stddev"}).first()
df = df.filter(f"purchase_frequency between {mean - 3*std} and {mean + 3*std}")
# 分片与索引(假设HDFS分片按user_id)
# 性能优化:缓存
user_profile = df.groupBy("user_id").agg({"purchase_amount": "sum"}).cache() # 缓存中间结果
# 查询
result = user_profile.filter("sum_purchase_amount > 1000").collect()
5) 【面试口播版答案】
“之前参与过电商平台的用户行为分析项目,数据量每天约50GB,处理时发现查询延迟较高。首先,我们通过数据清洗提升数据质量:过滤掉缺失的用户ID(占4%),用中位数填充缺失的购买金额(占3%),用3σ原则识别并过滤异常的购买频率(如单用户单日购买超过100次),这样数据完整性提升到98%,分析准确率提升1.5%。针对性能瓶颈,我们采用分片策略,按用户ID作为分片键(100个分片),为时间戳字段建立索引,并使用Spark的广播缓存机制缓存用户画像的中间聚合结果。优化后,查询延迟从8秒降至2秒,任务处理时间从1.5小时缩短至30分钟。”
6) 【追问清单】
7) 【常见坑/雷区】