大数据开发学习Day41

一、Linux

1. 批量解压当前目录所有 tar 压缩包

bash 复制代码
for file in *.tar;do tar -xvf $file;done

循环遍历后缀 tar 文件,逐条执行解压命令,批量处理离线归档数据文件,省去单次解压重复操作

2. 查看 HDFS 文件写入修改时间

bash 复制代码
hdfs dfs -ls -r /user/hive/dws/sale_summary

-ls -r 倒序展示文件,最新生成文件排在顶部

核查报表生成时间、判断任务是否按时产出

3. 查找包含指定关键字的所有脚本文件

bash 复制代码
find ./ -name "*.sh" -exec grep -l "spark-submit" {} \;

递归检索目录下 shell 脚本,筛选出包含提交 Spark 任务语句的文件,快速定位 ETL 调度脚本

二、SQL

表结构

dwd_online_service在线客服:case_id,user_id,deal_time,reply_duration,satisfaction

dwd_financial_asset用户资产:user_id,account_balance,frozen_money,update_dt

dwd_market_promotion营销活动:act_id,goods_id,prom_discount,sell_volume,create_dt

1. 统计各时段客服平均响应时长与差评占比

sql 复制代码
SELECT
hour(deal_time) deal_hour,
ROUND(AVG(reply_duration),2) avg_reply_time,
ROUND(SUM(IF(satisfaction=0,1,0))/COUNT(*),3) bad_rate
FROM dwd_online_service
WHERE deal_time BETWEEN '2026-05-01' AND '2026-05-25'
GROUP BY hour(deal_time)
ORDER BY deal_hour;

按小时划分服务时段,聚合计算平均回复耗时;条件判断统计差评比例,用于排班优化与服务质量考核

2. 计算用户可用资产与资金冻结占比

sql 复制代码
SELECT
user_id,
account_balance - frozen_money usable_money,
ROUND(frozen_money/account_balance,3) frozen_ratio
FROM dwd_financial_asset
WHERE update_dt='2026-05-25';

总资产扣除冻结金额得到可用资金,计算冻结资金占比,用于金融账户风险监控、资金流动性分析

3. 筛选折扣力度最大的 5 个活动商品

sql 复制代码
SELECT act_id,goods_id,prom_discount,sell_volume
FROM(
    SELECT *,
    ROW_NUMBER() OVER(PARTITION BY act_id ORDER BY prom_discount DESC) rn
    FROM dwd_market_promotion
)t
WHERE rn<=5;

以活动为分组维度,按折扣幅度排序,截取每组前五优惠商品,辅助运营挑选主推爆款商品

三、Pyspark

今日重点:自定义 UDF 函数开发与业务字段加工

  • 适用场景
    内置函数无法满足复杂逻辑计算,例如字段加密、等级判定、文本格式转换等自定义业务规则处理
  • 完整实操代码
python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

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

# 模拟用户数据
user_df = spark.createDataFrame([
    ("u001", 28, 6800),
    ("u002", 35, 12500),
    ("u003", 22, 3200)
],["user_id","age","month_income"])

# 定义自定义逻辑:收入等级划分
def income_level(income):
    if income < 5000:
        return "低收入"
    elif income < 10000:
        return "中等收入"
    else:
        return "高收入"

# 注册UDF
income_udf = udf(income_level, StringType)

# 调用UDF生成新字段
result_df = user_df.withColumn("income_tag", income_udf("month_income"))
result_df.show()
spark.stop()
  • 核心知识点讲解

    udf() 封装自定义 Python 函数,绑定返回值数据类型

    配合withColumn新增加工字段,灵活拓展业务逻辑

    注意:UDF 执行性能弱于原生函数,大批量数据优先优先内置算子

  • 优化补充

python 复制代码
# 启用向量化UDF,提升海量数据处理速度
spark.conf.set("spark.sql.execution.pythonUDF.arrow.enabled","true")

四、算法

二叉树的最大深度

python 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def maxDepth(root):
    if not root:
        return 0
    left_depth = maxDepth(root.left)
    right_depth = maxDepth(root.right)
    return max(left_depth, right_depth) + 1

思路讲解

递归遍历左右子树,分别求取深度,取最大值叠加根节点层数。

大数据场景可用于树形分类数据层级统计、目录层级深度计算

相关推荐
tiankongdeyige2 小时前
游戏战斗系统学习第2篇:有限状态机 (FSM)
学习·游戏·typescript
Qyr994 小时前
2026-2032直接芯片液冷板市场爆发式增长:AI算力浪潮下的热管理核心赛道
大数据·人工智能
蓝色的风-20264 小时前
国产算力双雄对决:曙光8000十万卡集群 vs 华为昇腾950超节点深度解析
大数据·人工智能·自然语言处理
an12321215 小时前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习
泛联新安5 小时前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
杨云龙UP5 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
by209995 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
乌暮6 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
SelectDB技术团队6 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
大大大大晴天6 小时前
每天认识一个组件:远端数据服务Apache Celeborn
大数据