spark集群文件分发问题

有一份csv数据在当前节点的本地路径上,本地模式跑可以通过:file://+本地路径正常读取

python 复制代码
df = spark.read \
      .option("header", "true") \
      .option("inferSchema", "true") \
      .csv("file:///home/ll/py_code/spark/train.csv")

当需要跑集群模式时,由于其他节点访问不到该路径会报错,解决办法是想办法使得所有节点可以访问该文件,可以通过以下方式解决:

1、使用HDFS路径,将数据上传到hdfs

这是生产环境最标准的方式,将数据上传到HDFS上,让所有节点通过同一地址访问得到该数据;

2、无权限上传hdfs时,使用 --files + SparkFiles.get()

脚本使用:SparkFiles.get()

python 复制代码
from pyspark.sql import SparkSession
from pyspark import SparkFiles  # 导入SparkFiles

# 创建SparkSession
spark = SparkSession.builder \
    .appName("ClusterFileRead") \
    .getOrCreate()

# 核心:通过 SparkFiles 获取被分发到各节点的文件路径
# 这里的 "train.csv" 必须和 --files 参数中指定的文件名一致
distributed_file_path = SparkFiles.get("train.csv")

# 使用获取到的路径读取数据
df = spark.read \
    .option("header", "true") \
    .option("inferSchema", "true") \
    .csv(distributed_file_path)

# 后续操作...
df.show(5)
print(f"数据行数: {df.count()}")

spark-submit 提交作业时添加 --files 参数:

bash 复制代码
# 在 node1 上提交作业
$SPARK_HOME/bin/spark-submit \
    --master spark://node1:7077 \  # 你的集群master地址
    --deploy-mode client \
    --files /home/ll/py_code/spark/train.csv \  # 关键参数:自动分发此文件
    01_spark_read_data.py

3、使用共享文件系统(如NFS)路径

将所有节点挂载同一个网络存储,代码中指向挂载点(例如 /mnt/data/train.csv)

为何不使用广播变量方式?
广播变量应严格用于分发非常小且只读的辅助数据,例如配置、映射表、字典等。

相关推荐
callJJ6 小时前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClient
java·大数据·人工智能·spring·spring ai·聊天模型
冻感糕人~6 小时前
收藏备用|小白&程序员必看!AI Agent入门详解(附工业落地实操关联)
大数据·人工智能·架构·大模型·agent·ai大模型·大模型学习
ai_xiaogui6 小时前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发
蓝眸少年CY6 小时前
Hadoop2-HDFS文件系统
大数据·hadoop·hdfs
凯子坚持 c7 小时前
如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器
分布式
Web3VentureView7 小时前
SYNBO Protocol AMA回顾:下一个起点——什么将真正推动比特币重返10万美元?
大数据·人工智能·金融·web3·区块链
老金带你玩AI7 小时前
CC本次更新最强的不是OPUS4.6,而是Agent Swarm(蜂群)
大数据·人工智能
Hello.Reader7 小时前
Flink Plugins 机制隔离 ClassLoader、目录结构、FileSystem/Metric Reporter 实战与避坑
大数据·flink
飞升不如收破烂~7 小时前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式