大数据开发学习Day27

一、Linux

查看当前系统环境变量
临时设置环境变量 JAVA_HOME=/usr/local/jdk
查找当前目录下所有 .log 后缀文件

bash 复制代码
env
export JAVA_HOME=/usr/local/jdk
find . -name "*.log"

env 查看全部环境变量,排查 JDK、Hadoop、Spark 环境配置
export 临时设置环境变量,会话生效,重启失效
find . -name "*.log" 按后缀批量找日志文件,大数据日志排查刚需

二、SQL

1341. 电影评分

sql 复制代码
-- 评分最多的用户
(
SELECT u.name
FROM MovieRating r
JOIN Users u ON r.user_id = u.user_id
GROUP BY u.user_id, u.name
ORDER BY COUNT(*) DESC, u.name ASC
LIMIT 1
)
UNION ALL
-- 2020-02 均分最高电影
(
SELECT m.title
FROM MovieRating r
JOIN Movies m ON r.movie_id = m.movie_id
WHERE DATE_FORMAT(r.created_at,'%Y-%m') = '2020-02'
GROUP BY r.movie_id, m.title
ORDER BY AVG(r.rating) DESC, m.title ASC
LIMIT 1
);

UNION ALL 合并两个结果集

分组统计次数 / 平均分 + 多字段排序兜底

同分、同频次按字典序最小选取,面试高频细节考点

多表关联 + 时间过滤 + 聚合排名,数仓综合题型

1350. 院系无效员工

sql 复制代码
SELECT e.name
FROM Employees e
LEFT JOIN Departments d 
ON e.id = d.id
WHERE d.id IS NULL;

LEFT JOIN + 右表字段IS NULL 求无匹配脏数据

数仓清洗常用:过滤维度不存在的无效业务数据

左连接空值判断经典模板

1366. 团队投票排名

sql 复制代码
SELECT 
    team_id,
    COUNT(DISTINCT member_id) AS vote_cnt
FROM TeamVotes
GROUP BY team_id
ORDER BY vote_cnt DESC, team_id ASC;

COUNT(DISTINCT) 去重统计人数

多字段排序:先按指标降序,再按维度 id 升序

业务榜单、排名报表标准写法

三、Pyspark

python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, countDistinct, avg, date_format

spark = SparkSession.builder.master("local[*]").appName("Day27").getOrCreate()

# 1. 无效员工筛选 LeftJoin 空值过滤
emp = spark.createDataFrame([(1,"Alice"),(2,"Bob")],["id","name"])
dept = spark.createDataFrame([(1,"HR")],["id","name"])

emp.join(dept, on="id", how="left")\
   .filter(col("dept.name").isNull())\
   .select("emp.name").show()

# 2. 团队投票人数统计
vote = spark.createDataFrame([
    (1,101), (1,102), (2,101)
], ["team_id","member_id"])

vote.groupBy("team_id")\
    .agg(countDistinct("member_id").alias("vote_cnt"))\
    .orderBy(col("vote_cnt").desc(), col("team_id").asc())\
    .show()

spark.stop()

Spark 左外连接 + 空值过滤做数据清洗

countDistinct 去重计数,和 SQL 完全对齐

多字段排序控制榜单展示规则

四、算法

26. 删除有序数组中的重复项

python 复制代码
def removeDuplicates(nums):
    if not nums:
        return 0
    slow = 0
    for fast in range(1, len(nums)):
        if nums[fast] != nums[slow]:
            slow += 1
            nums[slow] = nums[fast]
    return slow + 1

快慢指针原地去重

有序数组经典双指针套路

空间 O (1) 原地修改,面试必背

相关推荐
我是唐青枫3 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·数据库·spring
KaMeidebaby3 小时前
卡梅德生物技术快报|peg 修饰调控 MXene/WS2 异质结,氨气传感器制备与机理研究
大数据·前端·人工智能·架构·spark·新浪微博
ydyd202604213 小时前
设备管理应用推荐2026深度测评!
大数据·人工智能·机器学习
Lumbrologist3 小时前
【C++】零基础入门 · 第 13 节:类与对象基础
java·c++·算法
humors2213 小时前
学习方法的系统梳理与实践应用
学习·学习方法
志栋智能3 小时前
超自动化巡检:降低运维总成本(TCO)的有效路径
大数据·运维·网络·人工智能·自动化
码不停蹄的玄黓3 小时前
Java 生产者-消费者模型详解
java·开发语言·python
LONGZETECH3 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
爱讲故事的3 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
笨蛋不要掉眼泪3 小时前
Java并发编程:Executors框架类深度解析
java·开发语言·并发