大数据开发学习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 窗口计算的经典算法思想参考

相关推荐
多米哇卡11 小时前
Figure 03 实测 200 小时稳定作业,人形机器人商业化落地提速
大数据·人工智能·机器人
锦鲤521412 小时前
深度学习与神经网络学习
深度学习·神经网络·学习
大帅点兵12 小时前
设计一个金融交易监控系统
大数据·clickhouse·flink·spark·kafka·hbase
1892280486112 小时前
NQ486固态MT29F16T08GSLDHL8-QM:D
大数据·人工智能·科技·microsoft·缓存
Elastic 中国社区官方博客12 小时前
Elasticsearch:跨数据库与业务系统进行搜索
大数据·数据库·人工智能·elasticsearch·搜索引擎·全文检索
dianziqian12 小时前
什么是电子签?
大数据·网络·人工智能
楼田莉子12 小时前
C++20现代特性:概念与约束
开发语言·c++·后端·学习·c++20
算法channel12 小时前
实测一个本地知识库:自动学习电脑里的几百个文件,一键导出总结报告!
学习
眼眸流转12 小时前
Dify学习笔记
笔记·学习·agent·dify