智算多多联系我们


关注我们

公众号

视频号
隐私协议用户协议
◎ 2025 北京智算多多科技有限公司版权所有京ICP备 2025150592号-1
每年电商大促期间产生的用户行为数据量都是天文数字。以某头部电商平台为例,双11当天用户点击、加购等行为日志通常超过百亿条,传统单机处理工具根本无力应对。这时候就需要PySpark这种分布式计算框架出场了。
我去年负责过一个3C品类大促项目,原始日志文件大小就达到2.3TB。用Pandas尝试读取时直接内存溢出,而PySpark仅用3个节点就在20分钟内完成了初步清洗。这得益于其两大核心能力:
# 典型PySpark初始化配置
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Double11_Analysis") \
.config("spark.executor.memory", "8g") \
.config("spark.driver.memory", "4g") \
.getOrCreate()
实际工作中常见三个性能瓶颈:数据倾斜、小文件问题和序列化开销。针对数据倾斜,我习惯先用sample()抽样检测key分布:
df.sample(False, 0.1).groupBy("user_id").count().orderBy("count", ascending=False).show()
如果发现某些用户ID出现频次异常高,就需要考虑使用盐值分桶或者两阶段聚合等优化手段。这些经验在分析秒杀活动数据时尤为重要。
原始用户行为日志就像未经加工的矿石,往往存在以下问题:
这是我们团队的标准化清洗流程:
from pyspark.sql.functions import unix_timestamp, col, expr
clean_df = raw_df.withColumn("event_time", unix_timestamp(col("timestamp"), "yyyy-MM-dd HH:mm:ss").cast("timestamp")) \
.filter(col("stay_duration") < 3600) \
.withColumn("session_id", expr("""concat(user_id, '_', floor(datediff(event_time, '2023-11-01')*24 + hour(event_time)*2))"""))
特征工程阶段最关键是构建行为序列特征。比如计算用户最近7天的点击深度: