当前位置: 首页 > news >正文

大数据开发学习Day8

一、Linux / Shell

任务:批量删除当前目录下所有 .tmp 结尾的临时文件

find.-name"*.tmp"|xargsrm-f# find . -name "*.tmp" 生成当前目录下所有.tmp文件的列表

批量删除文件

# 查找并删除所有.log文件find.-name"*.log"|xargsrm# 更安全的方式(处理空格文件名)find.-name"*.log"-print0|xargs-0rm

批量复制文件

# 复制文件到指定目录find.-name"*.txt"|xargs-I{}cp{}/target/dir/# 移动特定类型的文件ls*.jpg|xargs-I{}mv{}images/
-I{}替换字符串xargs-I{}cp{}/dest/-nN 每次传递N个参数xargs-n1逐个处理-PN 并行处理,N个进程xargs-P44进程并行-0以null分隔(配合find -print0)find...-print0|xargs-0-p交互模式,执行前确认xargs-prm

xargs:把管道传来的多行文本,转为命令行参数
rm -f:强制删除,不提示

大数据场景常用:批量清理日志、临时表、小文件

二、SQL

百分比计算、累积求和、分组条件筛选

1728. 每月活跃用户数 II(日期 + 分组 + 去重)

将原始 Activity 表按 (user_id, 月份) 分组,统计每个用户每月的不同活跃日期数

WITHuser_daysAS(SELECTuser_id,DATE_FORMAT(activity_date,'%Y-%m')ASmonth,COUNT(DISTINCTactivity_date)ASdaysFROMActivityGROUPBYuser_id,month)SELECTmonth,COUNT(DISTINCTuser_id)ASactive_usersFROMuser_daysWHEREdays>=2GROUPBYmonth;

DATE_FORMAT(activity_date, ‘%Y-%m’)
把日期(如 2026-04-09)格式化成 ‘2026-04’,用于按月聚合

1204. 最后一个能进入电梯的人(累积和 + 上限判断)

WITHweight_sumAS(SELECTname,SUM(weight)OVER(ORDERBYturn)AStotalFROMQueue)SELECTnameFROMweight_sumWHEREtotal<=1000ORDERBYtotalDESCLIMIT1;

SUM(weight) OVER (ORDER BY turn) 是窗口函数
ORDER BY turn 确保按排队顺序累加

550. 游戏玩法分析 IV(次日留存率,面试必考)

WITHfirst_loginAS(SELECTplayer_id,MIN(event_date)ASfirst_dateFROMActivityGROUPBYplayer_id)SELECTROUND(COUNT(DISTINCTa.player_id)/COUNT(DISTINCTf.player_id),2)ASfractionFROMfirst_login fLEFTJOINActivity aONf.player_id=a.player_idANDa.event_date=DATE_ADD(f.first_date,1);

CTE 找首登日期:MIN(event_date) 定位每个玩家第一天登录
次日判断:DATE_ADD(日期, 1) 精准匹配第二天
留存率公式:次日登录人数 / 总玩家数
去重计数:必须用 COUNT(DISTINCT) 避免同一天多次登录干扰 ROUND
保留 2位小数:面试标准输出格式

三、PySpark 核心新内容

自定义函数 Pandas UDF + 数据倾斜实战 + 分区优化

在PySpark分布式计算中,数据倾斜(某些分区数据量过大)是常见瓶颈,会导致任务执行缓慢甚至失败。Pandas UDF(User Defined Function)结合分区优化能高效缓解此问题:它利用Spark的分布式架构,将数据分块处理为pandas DataFrame,在分区级别应用向量化操作,减少JVM与Python的通信开销,同时通过自定义分区策略确保负载均衡

直接在 PyCharm 运行:

frompyspark.sqlimportSparkSessionfrompyspark.sqlimportfunctionsasFfrompyspark.sql.functionsimportpandas_udffrompyspark.sql.typesimportDoubleTypeimportpandasaspd spark=SparkSession.builder \.master("local[*]")\.appName("day8")\.getOrCreate()# 构造数据data=[(1,20.0),(2,30.0),(3,40.0),(4,50.0)]df=spark.createDataFrame(data,["id","score"])# ==================== 新知识点1:Pandas UDF(性能远高于普通UDF)====================@pandas_udf(DoubleType())defnorm_score(s:pd.Series)->pd.Series:returns/100df=df.withColumn("norm_score",norm_score(F.col("score")))df.show()# ==================== 新知识点2:重分区 & 合并小文件 ====================# 增加分区df_repart=df.repartition(4)# 合并分区df_coalesce=df_repart.coalesce(1)# ==================== 新知识点3:数据倾斜常用解法:加盐聚合 ====================df_salt=df.withColumn("salt",F.floor(F.rand()*3))df_salt.groupBy("id","salt").count().show()spark.stop()

结果

+---+-----+----------+|id|score|norm_score|+---+-----+----------+|1|20.0|0.2||2|30.0|0.3||3|40.0|0.4||4|50.0|0.5|+---+-----+----------+

Pandas UDF 用法

基于 Arrow 格式,速度是普通 UDF 的 10~100 倍

repartition 与 coalesce 区别

repartition(n):全量重分区,可增可减,有 shuffle
coalesce(n):只减不增,无 shuffle,用于合并小文件

加盐 + 两阶段聚合解决数据倾斜

随机前缀 + 两阶段聚合,解决单分区爆量

分区数对性能的影响

小知识点:
生产环境禁止大量小文件,必须用 coalesce 合并

四、算法

LeetCode 3. 无重复字符的最长子串

掌握滑动窗口双指针写法
理解用哈希集合 / 字典维护窗口
时间复杂度 O (n)

deflengthOfLongestSubstring(s:str)->int:char_map={}left=0max_len=0forright,cinenumerate(s):ifcinchar_mapandchar_map[c]>=left:left=char_map[c]+1char_map[c]=right max_len=max(max_len,right-left+1)returnmax_len
http://www.jsqmd.com/news/615730/

相关文章:

  • 《四十悟赋》
  • Prodigy宣布推出全球业界功能强大的I3C协议训练器
  • esp-gui:面向ESP32的轻量级嵌入式GUI事件驱动框架
  • WebSerial:基于WebSocket的MCU嵌入式Web终端技术
  • 电商客服+导购智能体的设计与开发豆
  • LangGraph V1.0.5 文档精炼版
  • OpenClaw学习助手:百川2-13B量化模型自动整理课程笔记
  • Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接该
  • AI开发-python-langchain框架(--并行流程 )伪
  • 企业级医疗 IoT 平台实战:实时生命体征系统从单机高并发到云原生流式 AI 的架构演进
  • 力扣396
  • 深度解析:红海云为何成为大中型企业首选HR数字化底座
  • OpenClaw+SecGPT-14B低成本方案:树莓派家庭安全中枢搭建
  • DS18B20多点温度采集驱动库设计与工业应用
  • 打理多个微信不用慌,告别切换内耗很简单
  • 碳纳米管的导电性、导热性到底有多好?
  • 大模型之Linux服务器部署大模型礁
  • OpenClaw智能监控:基于千问3.5-9B的7×24小时系统巡检
  • OpenClaw+Phi-3-mini-128k-instruct:法律文件比对与风险点标注系统
  • 基础算法-高精度:高精度减法
  • FastAPI子应用挂载:别再让root_path坑你一夜贾
  • SteerBot_TB6612:面向差速转向机器人的TB6612驱动Arduino库
  • 重塑供应链效能,中企销订货系统源码助力企业数字化突围
  • 进程通信与网络协议
  • Vue 3动画角色登录页:从创意到优化
  • 创建abb机器人机械装置————简易活塞
  • 双系统Linux死机解决方法
  • 四门课程,帮您转型AI产品经理
  • OpenClaw多模型切换技巧:Qwen3-14b_int4_awq与本地小模型协同作战
  • 2026年AI搜索问答优化天花板横评:5大源头厂家综合对比+采购避坑指南