大数据开发学习Day37

一、Linux

1. 批量统计当前目录下各类文件数量

bash 复制代码
ls -l | awk '{print $5,$9}' | sort | uniq -c

ls -l 列出文件详细属性

awk 截取文件大小与文件名

uniq -c 去重统计同类文件数目

实战用途:统计日志、数据文件数量,快速盘点 HDFS 本地缓存文件

2. 清空大日志文件不删文件(业务在线必备)

bash 复制代码
> /opt/hadoop/logs/hadoop-rm.log

直接清空内容,保留文件句柄,服务不用重启

禁止生产直接rm删运行中日志,极易导致进程异常

常用于 YARN、Spark 运行日志快速瘦身

3. HDFS 查看文件块存储位置

bash 复制代码
hdfs fsck /user/hive/dwd/order.db -files -blocks -locations

查看 HDFS 文件切块数量、副本数、存储节点

排查数据块损坏、副本丢失、存储不均衡问题

集群运维数据完整性巡检常用命令

二、SQL

表说明

dwd_user_login 用户登录表:user_id,login_time,login_ip,device_type,dt

dwd_sales_goods 商品销售表:goods_id,sale_num,sale_price,sale_time,shop_id

dwd_user_coupon 用户优惠券表:user_id,coupon_id,get_time,use_time,status

1. 统计每个用户最近 3 次登录时间

sql 复制代码
SELECT user_id,login_time,rn
FROM (
    SELECT 
        user_id,
        login_time,
        ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_time DESC) rn
    FROM dwd_user_login
) t
WHERE rn <= 3;

按用户分组,登录时间倒序排序

行号越小代表登录时间越近

筛选行号≤3,取出最近三次登录记录

用途:用户行为溯源、异常登录风险排查

2. 计算店铺商品销售额与客单价

sql 复制代码
SELECT
    shop_id,
    SUM(sale_num * sale_price) total_sale,
    AVG(sale_price) avg_price
FROM dwd_sales_goods
GROUP BY shop_id
ORDER BY total_sale DESC;

单商品销售额 = 销量 * 单价

聚合求和得到店铺总销售额

AVG 求平均售价即店铺客单价

电商店铺营收排行、经营分析核心 SQL

3. 统计领取未使用、已使用、过期优惠券数量

sql 复制代码
SELECT
    COUNT(CASE WHEN status=1 THEN coupon_id END) get_not_use,
    COUNT(CASE WHEN status=2 THEN coupon_id END) used_coupon,
    COUNT(CASE WHEN status=3 THEN coupon_id END) expire_coupon
FROM dwd_user_coupon
WHERE dt BETWEEN '2026-05-01' AND '2026-05-20';

status=1 已领取未使用;2 已使用;3 已过期

用CASE WHEN行转列分类统计

限定时间范围分区过滤,提升查询效率

营销活动优惠券核销数据分析专用

三、Pyspark

今日重点:PySpark 广播变量实战 + 大表小表 JOIN 最优方案

  • 适用场景
    一张超大业务表 + 一张小维度配置表关联
    维度表数据量小(字典表、地区表、品类映射表)
    直接 JOIN 产生大量 Shuffle,任务运行缓慢
  • 核心原理
    把小维度表广播分发到所有 Executor 节点
    每个计算节点本地持有全量小表数据,无需跨节点拉取数据
    彻底消除 Shuffle,极速完成关联
  • 完整可运行代码 + 注释
python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import broadcast

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

# 1. 读取超大用户行为明细表
big_behavior_df = spark.read.parquet("/user/hive/dwd/user_behavior")

# 2. 读取极小维度映射表(地区编码-地区名称)
small_area_df = spark.read.csv("/data/area_code_map.csv",header=True)

# 3. 广播小表进行关联(企业标准写法)
result_df = big_behavior_df.join(
    broadcast(small_area_df),
    big_behavior_df.area_code == small_area_df.area_code,
    how="left"
)

result_df.show()
spark.stop()
  • 详细优势

    零 Shuffle 过程,执行速度提升数倍

    极大减少集群磁盘 IO 与网络传输

    维度表更新直接替换文件即可,业务无感知

    数仓分层 DWD 层关联维度表标配写法

  • 使用禁忌 & 避坑

    禁止广播大表,会造成 Executor 内存爆满 OOM

    默认广播阈值:10MB 以内自动广播,可手动调整

    多张小表关联,全部统一加broadcast()包裹

python 复制代码
spark.conf.set("spark.sql.autoBroadcastJoinThreshold",20971520)
  • 面试必背
    大表 JOIN 小表 → 广播 Join(最优)
    大表 JOIN 大表 → 优化分区 + 调整 Shuffle 并行度
    倾斜大表 JOIN → 加盐打散 + 广播组合使用

四、算法

这里是引用

有效的括号

python 复制代码
def isValid(s: str) -> bool:
    stack = []
    dic = {')':'(',']':'[','}':'{'}
    for char in s:
        if char in dic.values():
            stack.append(char)
        else:
            if not stack or stack.pop() != dic[char]:
                return False
    return len(stack) == 0

思路精讲

利用栈先进后出特性匹配括号

字典存储右括号对应左括号映射关系

遍历字符,左括号入栈

遇到右括号弹出栈顶比对,不一致直接判定无效

遍历结束栈为空代表全部匹配完成
大数据实战用途

日志 JSON 字符串格式校验

复杂嵌套字段数据合法性校验

数据清洗规则校验高频栈思想

相关推荐
C++、Java和Python的菜鸟8 小时前
第2章 项目前置课-代码版本控制Git
大数据·elasticsearch·搜索引擎
小席是个热心肠8 小时前
AI相关的自我学习
java·人工智能·学习
Sammyyyyy9 小时前
如何在不停项目不停机的情况下切换AI大模型
大数据·人工智能
circuitsosk9 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
数智化管理手记10 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
何事误红尘11 小时前
Mqtt学习笔记(一):Mosquitto服务器搭建、MQTTX安装测试
学习
青山是哪个青山11 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
刀客Doc11 小时前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库
湘美书院--湘美谈教育11 小时前
湘美书院主理人谈AI文学:提示词与Skill的与时俱进
大数据·人工智能·安全·自动化·生活
weixin_5498083611 小时前
人力资源数字化转型:从工具堆叠到AI原生架构的组织级跃迁路径
大数据·人工智能