大数据开发学习Day35

一、Linux

查看本机 IP 地址
测试域名连通性
统计当前在线连接数

bash 复制代码
ip addr
ping -c 3 www.baidu.com
netstat -an | wc -l

ip addr 查看内外网 IP,集群节点互通排查

ping -c 指定次数 ping,测试网络连通性

netstat 统计连接数,排查服务并发压力

二、SQL

2041. 面试中被录取的候选人

sql 复制代码
SELECT DISTINCT c.candidate_id
FROM Candidates c
JOIN Rounds r ON c.interview_id = r.interview_id
WHERE c.years_of_exp >= 5
GROUP BY c.candidate_id
HAVING SUM(r.score) > 15;

多表关联 + 分组求和筛选条件,求职数据统计

2159. 排序购买订单

sql 复制代码
SELECT
customer_id,
MIN(order_date) AS first_order_date,
MAX(order_date) AS last_order_date
FROM Orders
GROUP BY customer_id;

聚合函数求极值,用户行为首末次行为统计

2235. 两数相加(数据库题型)

sql 复制代码
SELECT num1 + num2 AS sum FROM Numbers;

字段数值运算,基础数值计算语法

三、Pyspark

  1. 什么是 Spark 数据倾斜
  • 产生原因
    • 分组 Key、Join Key 分布极度不均,少量 Key 承载 90% 以上数据
    • 热点 Key 导致单个 Executor 任务爆表、OOM、执行超时
    • 常见场景
      • 大表 Join 小表热点用户
      • 日期固定值分组、空值大量聚集
      • 城市、地区少数热门维度聚集海量数据
  1. 解决方案 1:加盐打散(最常用)
  • 原理
    • 对倾斜 Key添加随机前缀打散分发
    • 普通 Key 不变
    • 另一端表扩容匹配随机数,完成 Join 后去除加盐恢复原始 Key
python 复制代码
from pyspark.sql import SparkSession
import random
from pyspark.sql.functions import col, concat, lit, substring

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

# 模拟倾斜大表:大量key=0热点数据
big_data = [(0,f"user{i}") for i in range(10000)] + [(1,"user10001")]
df_big = spark.createDataFrame(big_data,["join_key","user_name"])

# 模拟正常小表
small_data = [(0,"北京"),(1,"上海")]
df_small = spark.createDataFrame(small_data,["join_key","city"])

# 1. 大表倾斜key加盐 0 -> 0_0 ~ 0_9
def add_salt(key):
    if key == 0:
        return f"{key}_{random.randint(0,9)}"
    else:
        return str(key)

# Spark SQL加盐写法(企业通用)
df_big_salt = df_big.withColumn("salt_key",
    concat(col("join_key"),lit("_"),(col("join_key")%10))
)

# 2. 小表扩容10份,匹配加盐前缀
df_small_expand = df_small.join(
    spark.range(10),lit(1)
).withColumn("salt_key",concat(col("join_key"),lit("_"),col("id")))

# 3. 加盐后Join,彻底打散热点
join_df = df_big_salt.join(df_small_expand,on="salt_key","left")

# 4. 剔除加盐字段,恢复原始key
final_df = join_df.withColumn("real_key",substring(col("salt_key"),1,1))\
                  .drop("salt_key","id")

final_df.show()
spark.stop()
  1. 解决方案 2:拆分热点 Key 单独处理
  • 过滤出倾斜热点数据单独 Join
  • 正常数据正常 Join
  • 两部分结果 union 合并
    适用:热点 Key 数量极少场景
  1. 解决方案 3:空值倾斜优化
  • 大量null作为分组 / 关联 key 造成倾斜
python 复制代码
# 将null随机填充打散,避免聚集
df = df.fillna({"join_key":"rand_key_"})
  1. 解决方案 4:大表小表广播 Join(Broadcast)
  • 小表直接分发到所有 Executor,避免 shuffle 倾斜
python 复制代码
from pyspark.sql.functions import broadcast
# 小表广播
df_big.join(broadcast(df_small),on="key")

使用场景:一张大表、一张百级 / 千级小表

  1. 企业排查数据倾斜命令
  • 查看任务分区数据量分布
  • Spark UI 查看 Stage 详情,发现单个 task 数据量超大即为倾斜
  • 优先使用加盐解决绝大多数业务倾斜

四、算法

202. 快乐数

python 复制代码
def isHappy(n: int) -> bool:
    def get_sum(x):
        res = 0
        while x:
            res += (x%10)**2
            x //= 10
        return res
    slow, fast = n, get_sum(n)
    while slow != fast:
        slow = get_sum(slow)
        fast = get_sum(get_sum(fast))
    return slow == 1

快慢指针判循环,无哈希集合,空间最优

相关推荐
烟雨归来6 分钟前
Oracle备份NFS IO挂死引发PQ并行进程耗尽process
数据库·oracle
acd120098 分钟前
PHP 8.1 下 Swoole 协程 PDO 偶尔出现 MySQL 连接丢失问题排查
数据库·oracle
遇印记10 分钟前
网络安全,数据链路层,物理层
运维·服务器·网络·windows·学习
2601_9657422211 分钟前
AI是怎么判断一家本地商家值得推荐的?云南老板看完这篇就懂了
大数据·人工智能·算法·ai·新媒体运营
Raas10012 分钟前
AI网关能做成本分摊吗?MAI Gateway(魔芋企业级AI网关)如何赋能企业AI能力
大数据·人工智能·ai·大模型·ai网关·mai gateway
Raas10013 分钟前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关能做调用审计吗?AI网关核心功能详解
大数据·网络·人工智能·gateway·ai网关·mai gateway
cc57250265319 分钟前
2027校招:大数据管理与应用转财务数字化,会计业务、SQL与BI学习路线
数据库·sql·学习
Swilderrr24 分钟前
论文精读 | Fast Approximate Similarity Join in Vector Databases(SimJoin)
笔记·学习
starzy199025 分钟前
Flink SlotManager 分配 Slot 源码深度剖析:从请求接收到状态转换的完整链路
大数据·flink
枯木◊靠推文躺平版30 分钟前
2026 企业 AI 办公平台怎么选:选型框架与主流产品全景
大数据·人工智能