一、Linux
1. 查找系统中大于 1GB 的日志并批量列出路径
bash
find /opt/bigdata/logs -type f -size +1G -print
-type f:仅匹配普通文件,排除目录
-size +1G:筛选大小超过 1GB 的文件
实战场景:定期巡检超大日志文件,及时清理避免磁盘占满
2. HDFS 对比本地文件与集群文件差异
bash
hdfs dfs -cat /user/hive/ods/test.csv | diff - /data/test.csv
hdfs dfs -cat 读取 HDFS 文件内容,通过管道交给diff
对比本地文件和 HDFS 文件内容,校验数据上传是否完整、有无篡改
数据同步、数据校验环节常用
3. 查看当前服务器已打开的文件句柄
bash
lsof -n | wc -l
lsof:查看系统打开的文件、端口、进程句柄
大数据服务(Spark、Hadoop)句柄泄露排查专用,句柄过高会导致服务宕机
二、SQL
表结构说明
dwd_user_recharge 用户充值表:user_id, recharge_amount, recharge_time, pay_channel, dt
dwd_device_stat 设备统计表:device_id, device_type, online_duration, error_cnt, dt
dws_retention_stat 用户留存宽表:dt, user_id, first_login_dt, is_remain_1d, is_remain_7d
1. 按支付渠道统计充值笔数、总金额、单笔均值
sql
SELECT
pay_channel,
COUNT(*) AS recharge_cnt,
SUM(recharge_amount) AS total_amount,
ROUND(AVG(recharge_amount),2) AS avg_amount
FROM dwd_user_recharge
WHERE dt >= '2026-05-01'
GROUP BY pay_channel
ORDER BY total_amount DESC;
按支付渠道分组,多维度聚合统计充值指标
单笔平均金额用于分析不同渠道用户充值习惯
排序直观展示主流支付渠道,支撑运营和财务分析
2. 统计各设备类型平均在线时长、设备故障数
sql
SELECT
device_type,
ROUND(AVG(online_duration),2) AS avg_online,
SUM(IF(error_cnt > 0, 1, 0)) AS fault_device_num
FROM dwd_device_stat
WHERE dt = '2026-05-25'
GROUP BY device_type;
物联网 / APP 运维场景经典统计,区分设备类型评估稳定性
IF 判断故障次数,统计出过故障的设备数量
用于设备版本迭代、故障专项治理分析
3. 统计每日新增用户、1 日留存率、7 日留存率
sql
SELECT
dt AS new_user_dt,
COUNT(*) AS new_user_num,
ROUND(SUM(is_remain_1d)/COUNT(*),4) AS remain_1d_rate,
ROUND(SUM(is_remain_7d)/COUNT(*),4) AS remain_7d_rate
FROM dws_retention_stat
GROUP BY dt
ORDER BY dt;
数仓 DWS 层留存指标标准写法,互联网行业核心运营指标
is_remain_1d/is_remain_7d 为标记字段(1 留存,0 流失)
每日监控新增用户质量,判断产品拉新效果
三、Pyspark
今日重点:PySpark 开窗函数实战(企业报表高频)
- 应用场景
分组内排序、累计求和、滑动统计、排名计算,对应 Hive 开窗函数,用于制作运营报表、用户分层、榜单统计 - 完整代码 + 逐行注释
python
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number, sum, col
spark = SparkSession.builder.appName("WindowFuncDemo").getOrCreate()
# 模拟门店销售数据
sale_data = [
("shop01", "2026-05-23", 2300),
("shop01", "2026-05-24", 1800),
("shop01", "2026-05-25", 3100),
("shop02", "2026-05-23", 4200),
("shop02", "2026-05-24", 2900)
]
df = spark.createDataFrame(sale_data, ["shop_id", "sale_dt", "sale_amount"])
# 定义开窗规则:按门店分组,按日期升序排列
win_spec = Window.partitionBy("shop_id").orderBy("sale_dt")
# 1. 组内排名
df = df.withColumn("rn", row_number().over(win_spec))
# 2. 分组内累计销售额(累加求和)
df = df.withColumn("cum_sale", sum("sale_amount").over(win_spec))
df.show()
spark.stop()
-
核心知识点详解
- Window 开窗规则
- partitionBy:等同于 SQL PARTITION BY,数据分组
- orderBy:组内排序,排名、累计计算必须依赖排序
- row_number():连续不重复行号,同分不同名,取 TopN 首选
- sum () + 开窗:实现累计求和,常用于日累计销售额、累计充值等报表
- 拓展区分(面试考点)
- row_number():行号连续,无并列
- rank():允许并列,排名会跳号
- dense_rank():允许并列,排名不跳号
- Window 开窗规则
-
生产优化
开窗函数会触发 Shuffle,数据量大时合理设置分区并行度:
python
spark.conf.set("spark.sql.shuffle.partitions", "20")
四、算法
二叉树层序遍历
python
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrder(root):
if not root:
return []
res = []
queue = deque([root])
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(current_level)
return res
思路讲解
借助队列实现广度优先遍历(BFS),逐层读取二叉树节点
每次先记录当前层节点总数,循环处理整层数据
子节点依次入队,完成分层收集
大数据实战用途树形目录、层级分类数据逐层解析
流式数据分层消费、多节点任务队列调度逻辑参考