想快速入门 Spark?那咱们先把环境搭起来。首先得安装 Java,因为它是 Spark 的基础。在 Ubuntu 系统里,你可以用命令
sudo apt-get install openjdk-11-jdk
来安装。接着是 Scala,同样用sudo apt-get install scala
就能搞定。最后下载 Spark 压缩包,解压后配置好环境变量,这样基本环境就准备好了。df.filter(df("age") >= 18)
。掌握了基础概念,就可以开始写代码了。比如统计数据里的 PV 和 UV,PV 是页面访问量,直接用
data.count()
就能得到。UV 是独立访客数,需要先提取 IP 地址,再去重,代码像这样:ips = data.map(x => x.split(" ")(0)).distinct()
,然后统计数量。在处理大规模数据时,Spark SQL 的性能优化很重要。数据倾斜是常见问题,比如某些分区数据量特别大。这时候可以试试采样,找出导致倾斜的 key,或者用 Map Join 把小表广播到每个节点,减少 shuffle 开销。比如在连接订单表和客户表时,如果客户表比较小,就用
/*+ BROADCAST(customers) */
提示优化器。orders.cache()
就能把订单数据缓存起来,后续的聚合操作就会快很多。另外,序列化方式选 Kryo 比默认的 Java 序列化更高效,设置spark.serializer = org.apache.spark.serializer.KryoSerializer
就能启用。Spark 的 MLlib 库支持多种机器学习算法。以客户流失预测为例,首先得预处理数据,比如用 StringIndexer 把标签列转换为数值,用 VectorAssembler 把特征列组合成特征向量。然后划分训练集和测试集,用逻辑回归模型训练。评估模型性能时,计算 AUC 值,看看预测效果如何。
Spark 3.5 引入了对 PyTorch 的分布式训练支持。比如用 Mosaic Streaming 工具,可以高效地将 Spark 处理后的数据传输到 PyTorch 模型中训练。自定义一个 Dataset 类,继承 StreamToTorchDataset,在
__getitem__
方法里把数据转换为张量并移动到 GPU 上。然后用 DataLoader 批量加载数据,训练模型时就能充分利用 GPU 的算力。学习 Spark 没有捷径,得不断实践。从基础的环境搭建到复杂的机器学习项目,每一步都要亲自动手。遇到问题多查官方文档和社区,比如 Spark 3.5 的新特性,像 Structured Streaming 的 watermark 传播和 dropDuplicatesWithinWatermark 操作,都是提升实时处理能力的重要功能。