大数据开发学习Day42

一、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():允许并列,排名不跳号
  • 生产优化

    开窗函数会触发 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),逐层读取二叉树节点

每次先记录当前层节点总数,循环处理整层数据

子节点依次入队,完成分层收集
大数据实战用途

树形目录、层级分类数据逐层解析

流式数据分层消费、多节点任务队列调度逻辑参考

相关推荐
愚者Pro2 小时前
Flutter Widget组件学习(专为 Uniapp 转 Flutter 定制)
vue.js·学习·flutter·uni-app
Agent手记2 小时前
制造业生产流程自动化,Agent需要具备哪些能力?深度拆解2026工业级智能体落地范式与核心架构
大数据·人工智能·ai·架构·自动化
硅基流动2 小时前
光谷爱计算 × 硅基流动:AI 算力联合运营,共建高效“Token 工厂”
大数据·人工智能
xinshu5273 小时前
企业工商和司法风险:从定义到AI识别的完整指南
大数据·人工智能·技术分享
anew___3 小时前
国产AI大模型巅峰对决:2026年5月主流模型深度横评
大数据·人工智能
yzx9910133 小时前
从焦虑到掌控:关于学习AI工具的深度思考
人工智能·学习
财经资讯数据_灵砚智能3 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月26日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能
zhangrelay4 小时前
ROS 2 Lyrical Luth启程-Ubuntu26.04-
linux·笔记·学习·ubuntu
计算机安禾4 小时前
【算法分析与设计】第10篇:下界理论与NP完全性初步
大数据·人工智能·算法