当前位置: 首页 > news >正文

修改spark源码不生效的问题

spark版本为3.0.3

阅读前可以先看一下这个文章:

spark 编译环境搭建_spark 编译器搭建 vs-CSDN博客

Windos环境下查看spark源码:

我们从spark官网下载的源码有很多子项目(模块),如core,spl.core,examplesd等等:

这些模块之间有依赖关系,但是对应模块的依赖库中没有对方就会无法运行而报错

# 如我在example模块中写的类用到了Logging,以及sql.core。

# 而sql.core又用到了core中的SparkSession类,但是example模块没有core和sql.core的依赖

如果直接编译运行的话:

# 上图报错就是因为example模块用到了org.apache.spark.internal.Logging类,而该模块的依赖库中又没有对应的库(类,模块)

可以去项目结构查看当前xx模块用到了哪些库:

# 翻阅依赖后发现没有我们所需要的core,sql.core依赖

所以我们需要让example的依赖库中有它所依赖的,在这个spark包里面的其他模块的jar包(如下图的spark.spl模块的jar包):

# 该jar包是由sql.core打包而来

他才能正常编译运行.

我们下载官方使用的spark,其中含有jars文件:

该jars目录含有各个模块所需要的依赖,为了省事,我们选择把这些依赖都导入每个模块:

然后就能正常运行了(这里会再次构建一下)。

# 注意maven的构建命令 和 idea的构建 有区别,建议windows构建的话,使用idea的构建,即不要勾选委托给maven

# 默认是不勾选的。因为使用maven构建的话,会进行测试,而测试中会用到sh脚本,windows没这玩意会构建失败

根据上述构建的话

随之而来就是我们修改core中的SparkSession类后,在example中执行的类所依赖的core的jar包并没有随之更新,

就会出现 修改源码不生效 以及 在源码中新开一行添加注释后导致调试时高亮行与实际运行错位 的情况:

# 控制台应该输出 修改demo==========Running Spark version 3.0.3

# 在源码中新加一行导致错位

要解决这种情况,只需要我们在每次修改后,将对应模块打成jar包替换掉原本jar包即可。

在core下执行mvn clean install -Dmaven.test.skip=true打成jar包:#需要跳过测试

用生成的spark-corel的jar替换掉原本jars目录中的spark-core的jar(为了方便理解,复制jars目录,并改名为jars_xiugai)

# 省事的话不用删除原来的引入的jars,直接替换一下就行。

# 这里是为了方便理解,复制jars目录,并改名为jars_xiugai导入,将原来的jars删了。

效果:

参考:

idea构建与maven构建区别:

IDEA面板Build Project和maven compile、package、install、deploy的区别-CSDN博客

关于maven的构建命令区别:

MVN命令之clean,compile,build,install,package区别_mvn clean compile-CSDN博客

spark源码编译:

spark 编译环境搭建_spark 编译器搭建 vs-CSDN博客

题外话:

上述修改过于麻烦,所以我在想可不可以将所有模块编译在saprk源码目录下的targe中,这样就不用导入jar包和修改jar包了?等一个大佬指点一下。



后续补充:

Spark项目本质是一个Maven的父子项目,其实不需要额外引入jar包,可以直接在设置-项目结构-模块-各个模块-依赖-引入项目中其他模块即可,相关知识和具体步骤可搜索:maven父子项目子模块之间依赖。或者问问不大靠谱的ai大人(

这样就能实现普通项目中的实时编辑,实时运行查看结果。

http://www.jsqmd.com/news/778509/

相关文章:

  • 如何彻底解决fzf命令行工具中的边界安全问题:从根源避免索引越界错误
  • Ledger硬件钱包与AI应用的安全桥梁:ledger-connect-mcp实战指南
  • bumpalo与serde集成:实现高效序列化的完整指南
  • 从Datasheet到代码:实战解析NAND Flash驱动中Dummy周期的配置与调试
  • Unity轻量级框架QFramework:四层架构与命令事件驱动的实战指南
  • 3分钟解锁Vite处理JSON的6个实用技巧:从入门到性能优化
  • mysql2sqlite高级应用:如何处理AUTO_INCREMENT、FOREIGN KEY和BIT字段
  • 2026 岩茶加盟行业深度报告:告别野蛮生长,全链路扶持成品牌竞争核心壁垒 - 商业科技观察
  • 需求工程实战:从技能树到敏捷落地的SwiftyJourney
  • RocketMQ如何保证消息不丢失?
  • 65nm FPGA功耗优化技术与工程实践
  • 第7篇:Java面向对象简介
  • 【Git】入门,基本操作
  • Perplexity AI API封装库实战:构建带引用功能的智能搜索应用
  • 从零实现轻量级LLM推理引擎:nano-vllm核心原理与工程实践
  • LangGraph 的结构
  • vscode-dark-islands的测试运行操作:色彩与图标优化
  • AI任务分解与执行框架:从原理到实战构建智能工作流引擎
  • 5分钟掌握Zotero Style:让你的文献管理从混乱到高效的终极指南
  • vscode-dark-islands主题下的R Markdown编辑:代码块与文本色彩区分
  • MoveIt 核心架构深度解析:理解机器人运动规划的全流程
  • BookPlayer开发者指南:如何为开源音频播放器项目贡献代码
  • 老司机翻车记:双路E5+PVE7.0直通GTX1060,我踩过的那些坑和最终解法
  • Beancount文档建设终极指南:从新手入门到API开发的完整教程
  • #2026最新靠谱包装印刷公司推荐!国内权威榜单发布,广东佛山等地实力企业精选 - 十大品牌榜
  • CodeAtlas:代码可视化分析工具的设计原理与应用实践
  • AI智能体执行器:从意图到安全动作的工程实现
  • 用Matlab手把手教你搭建IMM目标跟踪仿真环境(CV/CA/CT模型代码详解)
  • ***对于UPX反调试一类题的做法***
  • UNIAGENT:统一AI智能体框架的设计原理与实战应用