大数据开发学习Day38

一、Linux

1. 查看 HDFS 目录层级及文件大小

bash 复制代码
hdfs dfs -du -h /user/hive/warehouse/dwd.db

-du -h 人性化单位展示 HDFS 目录占用空间

快速判断数仓分层表数据量大小,判断是否需要归档清理

日常数仓存储容量巡检必备

2. 筛选日志中指定时间段报错日志

bash 复制代码
grep '2026-05-21 10:' /opt/spark/logs/spark.log | grep -i error

先限定时间范围,再过滤错误信息

精准定位指定时段 Spark、YARN 任务报错

比全量检索效率高数十倍,排错最快用法

3. 后台运行 Python 脚本并输出日志

bash 复制代码
nohup python3 etl_task.py > task_run.log 2>&1 &

nohup 离线后台运行,断开终端不终止进程

task_run.log 正常日志写入文件

2>&1 错误日志同步写入日志文件

大数据离线 Python 清洗脚本通用启动方式

二、SQL

通用表结构

dwd_traffic_log 流量日志:user_id,net_type,visit_time,stay_time,dt

dwd_finance_trade 金融交易表:trade_id,user_id,trade_money,trade_type,trade_time

dwd_product_flow 商品流量表:goods_id,expose_num,click_num,sale_num,dt

1. 统计不同网络类型用户平均停留时长

sql 复制代码
SELECT
net_type,
ROUND(AVG(stay_time),2) avg_stay_time,
COUNT(DISTINCT user_id) user_cnt
FROM dwd_traffic_log
WHERE dt='2026-05-21'
GROUP BY net_type;

net_type 区分 4G、5G、WiFi、有线网络

AVG(stay_time) 计算用户页面平均停留时长

同时统计对应网络下活跃用户数

用途:移动端 APP 体验优化、流量场景分析

2. 金融统计用户单日最大单笔交易、累计交易金额

sql 复制代码
SELECT
user_id,
MAX(trade_money) max_single_money,
SUM(trade_money) total_trade_money
FROM dwd_finance_trade
WHERE dt='2026-05-21'
GROUP BY user_id;

MAX 取出单日单笔最高交易额

SUM 汇总用户全天交易总额

金融风控、用户资产评级、大额交易监控核心 SQL

可延伸用于识别异常大额转账用户

3. 计算商品点击率、转化率

sql 复制代码
SELECT
goods_id,
expose_num,
click_num,
sale_num,
ROUND(click_num/expose_num,4) click_rate,
ROUND(sale_num/click_num,4) convert_rate
FROM dwd_product_flow
WHERE dt='2026-05-21';

曝光量→点击量→成交量三层漏斗

点击率 = 点击数 / 曝光数

转化率 = 成交量 / 点击数

电商运营商品爆款筛选、投放效果核心指标

三、Pyspark

今日重点:PySpark Structured Streaming 实时流读取 Kafka 完整实战

  • 业务场景
    实时消费用户行为、订单、设备上报数据流,做实时统计、实时预警
  • 核心依赖
    提交任务必须携带 Kafka 连接依赖包
  • 完整可运行代码
python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import from_json,col
from pyspark.sql.types import StringType,StructType,StructField

# 1. 初始化Spark会话,开启流处理+依赖
spark = SparkSession.builder \
.appName("KafkaStreamRead") \
.getOrCreate()

# 2. 读取Kafka实时数据流
kafka_df = spark.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers","192.168.1.100:9092") \
.option("subscribe","user_behavior_topic") \
.option("startingOffsets","latest") \
.load()

# 3. 定义JSON数据结构
schema = StructType([
    StructField("user_id",StringType()),
    StructField("event_type",StringType()),
    StructField("event_time",StringType())
])

# 4. 解析Kafka JSON数据
stream_df = kafka_df.select(from_json(col("value").cast("string"),schema).alias("data")) \
.select("data.*")

# 5. 控制台输出测试
query = stream_df.writeStream \
.outputMode("append") \
.format("console") \
.start()

query.awaitTermination()

format("kafka") 指定数据源为 Kafka 流

subscribe 订阅指定主题,支持多个主题逗号分隔

startingOffsets latest 读取最新数据,earliest 从头读取历史数据

Kafka 原始数据为二进制,必须转为 string 再解析 JSON

from_json 按照预定义结构拆分字段

append 追加模式,只输出新增数据,流处理最常用输出模式
生产实战要点

线上禁止console输出,写入 ClickHouse/Hive/Kafka

流处理必须设置水印处理乱序数据

实时任务开启checkpoint断点续跑,防止丢数

python 复制代码
.option("checkpointLocation","/hdfs/checkpoint/stream_task")

三种输出模式:append、complete、update 适用场景

Kafka 流消费丢数、重复消费解决方案

实时任务断点续传原理

四、算法

合并两个有序数组

python 复制代码
def merge(nums1, m, nums2, n):
    i,j,k = m-1,n-1,m+n-1
    while i>=0 and j>=0:
        if nums1[i] > nums2[j]:
            nums1[k] = nums1[i]
            i -= 1
        else:
            nums1[k] = nums2[j]
            j -= 1
        k -= 1
    nums1[:j+1] = nums2[:j+1]

思路精讲

倒序双指针合并,避免数组元素覆盖

从两个数组末尾开始比较取值放入末尾

剩余元素直接批量填充
大数据用途

离线分片有序数据合并

日志有序时间数据合并排序

数据分区有序重组高频思想

相关推荐
math_hongfan1 分钟前
鸿蒙Flutter setState机制深入理解
学习·flutter·华为·harmonyos·鸿蒙
其实防守也摸鱼10 分钟前
补天SRC新手入门指南:从0到1的漏洞挖掘之路
网络·python·学习·安全·web安全·数据挖掘·挖洞
lupai12 分钟前
手机在网状态查询 API 新手实战指南
大数据·python·智能手机
AI_Auto31 分钟前
工业与AI融合应用 | 四个实战用例!机械装备行业AI+数字孪生+机器人落地全景
大数据·人工智能·机器人·制造
小羊Yveesss1 小时前
模板建站哪个平台好?模板数量之外还要比较编辑与SEO能力
大数据·人工智能·小程序
千瓜2 小时前
用户洞察:负鼠走红?解读新世代“动物人格”
大数据·人工智能·数据分析·生活·新媒体
FellAveal3 小时前
【Go语言入门学习笔记】Part13.结构体与接口
笔记·学习·golang
Leekwen3 小时前
认识人与人的大不同
学习·思考·生活·认知高度·审视自己
liuliuqiqirr3 小时前
2026最新两款AI编程工具深度对比实测
大数据·ai编程
一只小菜鸡..3 小时前
Stanford CS144 学习笔记 (九):大师访谈与互联网的未来
笔记·学习