大数据开发学习Day44

一、Linux

1. 查看系统开机至今所有用户登录记录

bash 复制代码
last

读取系统登录日志,展示所有账号登录时间、IP、终端信息

实战场景:集群安全审计、异常账号登录排查、运维行为追溯

2. HDFS 递归创建多级目录并设置权限

bash 复制代码
hdfs dfs -mkdir -p /user/bigdata/etl/log/202605 && hdfs dfs -chmod 755 /user/bigdata/etl/log/202605

-p:递归创建多级目录,上级目录不存在也可正常创建,避免报错

chmod 755:设置目录权限,所有者读写执行,其他用户可读可执行

大数据分层目录初始化、脚本落地目录标配操作

3. 筛选当前运行中所有 Python 进程并查看详情

bash 复制代码
ps -aux | grep python3 | grep -v grep

ps -aux 展示进程完整信息(用户、CPU、内存、启动命令)

过滤 Python3 进程,排除 grep 自身进程

排查 PySpark 后台任务、数据同步脚本卡死、僵尸进程专用

二、SQL

表结构说明

dwd_express_info 物流快递表:order_id,user_id,express_no,trans_status,trans_city,dt

dwd_user_tag 用户标签表:user_id,age_tag,consume_tag,active_tag,dt

dws_hourly_sales 小时级销售宽表:dt,hour,sale_amt,order_cnt,refund_cnt

1. 统计各城市物流运输状态分布

sql 复制代码
SELECT
    trans_city,
    trans_status,
    COUNT(order_id) AS order_num
FROM dwd_express_info
WHERE dt = '2026-05-25'
GROUP BY trans_city, trans_status
ORDER BY trans_city, order_num DESC;

按城市 + 物流状态双维度分组,统计对应订单量

trans_status 区分运输中、已签收、退回、异常等状态

业务用途:物流网点运营监控、异常包裹地域分析、配送效率评估

2. 不同年龄 & 消费标签组合的用户数量统计

sql 复制代码
SELECT
    age_tag,
    consume_tag,
    COUNT(DISTINCT user_id) AS user_cnt
FROM dwd_user_tag
WHERE dt = '2026-05-25'
GROUP BY age_tag, consume_tag
ORDER BY user_cnt DESC;

多标签交叉维度统计,是用户画像分析核心写法

可精准定位核心客群,支撑精准营销、活动策划

基于分区过滤数据,规避全表扫描,提升查询性能

3. 计算每日各时段订单退款率、峰值时段定位

sql 复制代码
SELECT
    hour,
    order_cnt,
    refund_cnt,
    ROUND(refund_cnt / order_cnt, 4) AS refund_rate
FROM dws_hourly_sales
WHERE dt = '2026-05-25'
ORDER BY hour;

基于预聚合小时宽表做指标计算,减少重复计算,提升查询效率

退款率反映对应时段交易质量,定位高退款风险时段

数仓 DWS 层报表取数标准用法,线上运营监控高频使用

三、Pyspark

今日重点:PySpark 数据分区规则 + 手动控制分区并行度

  • 应用场景
    默认分区不合理,导致任务并行度不足、执行缓慢,或分区过多产生海量小文件;手动调整分区适配集群资源与数据量。
  • 完整代码 + 逐行注释
python 复制代码
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("PartitionOpt").getOrCreate()

# 1. 读取原始数据,查看默认分区数
df = spark.read.parquet("/user/hive/dwd/order_info")
print("默认分区数:", df.rdd.getNumPartitions())

# 2. 场景1:增大分区,提升并行计算能力(会触发Shuffle)
df_more_part = df.repartition(30)
print("重分区后分区数:", df_more_part.rdd.getNumPartitions())

# 3. 场景2:减少分区,合并小文件(无Shuffle,高效)
df_less_part = df.coalesce(8)
print("合并后分区数:", df_less_part.rdd.getNumPartitions())

# 4. 基于指定字段分区(分区表写入常用)
df_part_by_field = df.repartition(10, col("dt"))

# 写入分区表,分区字段为dt
df_part_by_field.write.mode("overwrite")\
    .partitionBy("dt")\
    .saveAsTable("dwd.order_partition")

spark.stop()
  • 核心知识点详解

    • 分区查看
      rdd.getNumPartitions():获取当前 DataFrame 实际分区数,调优第一步必查。
    • repartition(num / repartition(num, col))
      全面重分区,一定会触发 Shuffle,数据全局打散
      适用:需要提升并行度、按业务字段分区写入分区表
    • coalesce(num)
      仅减少分区,不触发 Shuffle,性能远高于 repartition
      禁止用它增大分区,无法提升并行度
    • partitionBy
      写入 Hive 分区表专用,按照指定字段生成目录分区,是数仓分层落地的核心写法
  • 生产调优规范 & 避坑

    单分区数据建议控制在 128MB~256MB,平衡计算效率与小文件问题

    离线任务默认 Shuffle 分区参数调整:

python 复制代码
# 全局设置Shuffle默认分区数
spark.conf.set("spark.sql.shuffle.partitions", "24")

流处理任务分区数建议和 Kafka 分区数保持一致,避免数据倾斜

  • 面试核心考点
    区分 repartition 和 coalesce 的底层原理、性能差异、适用场景

四、算法

滑动窗口最大值

python 复制代码
from collections import deque

def maxSlidingWindow(nums, k):
    q = deque()
    res = []
    for idx, val in enumerate(nums):
        # 维护队列:队首始终为当前窗口最大值,移除队列内小于当前值的元素
        while q and nums[q[-1]] < val:
            q.pop()
        q.append(idx)
        # 移除超出窗口左边界的下标
        while q[0] <= idx - k:
            q.popleft()
        # 窗口形成后,记录结果
        if idx >= k - 1:
            res.append(nums[q[0]])
    return res

思路讲解

借助单调队列实现,队列中只存数组下标,对应数值从大到小排列

遍历数组,新元素不断弹出队列尾部更小元素,保证队列单调性

检查队首下标是否滑出窗口范围,超出则移除

窗口长度达标后,队首元素即为当前窗口最大值
大数据实战用途

实时数据流窗口统计(最大值、极值监控)

时序数据、设备指标、交易数据滑动窗口分析

PySpark Structured Streaming 窗口计算的经典算法思想参考

相关推荐
qq295329 分钟前
2026 财搭子决策模拟器:多智能体投研架构能力拆解
大数据·人工智能·架构
MartinYeung52 小时前
[论文学习]自主性如何重塑个性化对LLM智能体隐私关切与信任的影响
人工智能·学习
Ai拆代码的曹操3 小时前
Git 集成:AI 代理中的版本控制工作流设计
大数据·git·elasticsearch
FellAveal3 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
菜鸟‍3 小时前
【论文学习】MICCAI 2024 || SGSeg:通过自引导机制实现胸部X光片语言引导分割的无文本推理
人工智能·深度学习·学习
lazy H3 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
菜鸟‍3 小时前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉
晓子文集4 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
笨鸟先飞的橘猫5 小时前
只会脚本语言的游戏后端自我提升之路——c++学习(开篇)
学习·游戏
ApacheSeaTunnel5 小时前
Apache SeaTunnel 2.3.12 进阶实战:MySQL to PostgreSQL 5 套生产场景同步 Demo
大数据·开源·数据集成·seatunnel·技术分享·数据同步