You need to enable JavaScript to run this app. Spark作业提交Yarn运行读取HDFS Excel行数少于本地运行问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Spark作业提交Yarn运行读取HDFS Excel行数少于本地运行问题求助

问题根因梳理

  • Yarn模式下Excel行数缺失和HDFS块读取无关,是com.crealytics:spark-excel_2.11:0.13.1版本的分布式分片逻辑bug导致:Excel属于非分片友好的行存储格式,该版本默认会按executor核数拆分文件分片,但不会处理跨分片的行合并,只有包含完整行的分片会被计数,你看到的12条就是首个分片内的完整行数。
  • Local模式能读全量是因为计算全部在driver端执行,不会拆分文件分片,自然不会出现行丢失;抛出的JDBC异常是Simba Impala JDBC驱动不支持你代码中调用的特定JDBC特性,和Excel读取逻辑无关。

可行解决方案

1. 修复Yarn模式Excel行缺失问题

优先选择第一个方案:

  • 升级spark-excel依赖到适配Scala2.11、Spark2.x的兼容修复版,将提交命令中--packages参数的包版本替换为com.crealytics:spark-excel_2.11:0.14.0即可,该版本已修复分布式分片读取的行丢失问题。
  • 若无法升级依赖,读取Excel时强制关闭分片逻辑,添加配置项option("partitionSize", Long.MaxValue)让全量文件内容在单个分片内读取,参考代码:
val excelDf = spark.read.format("com.crealytics.spark.excel")
  .option("header", "true")
  .option("partitionSize", Long.MaxValue)
  .load("hdfs://your_excel_file_path")

2. 修复Local模式JDBC报错

  • 检查代码中JDBC调用配置,移除ResultSet.TYPE_SCROLL_INSENSITIVE、autoCommit=false这类Simba驱动不支持的参数。
  • 替换为和集群Impala版本匹配的官方JDBC4.2驱动包,即可解决特性不兼容问题。

3. 提交命令优化

你当前提交命令中--driver-class-path和--jars重复配置了JDBC包,Yarn模式下--jars会自动将包分发到executor并加入driver类路径,重复配置容易触发类冲突,优化后提交命令参考:

spark2-submit --master yarn --deploy-mode client --num-executors 5 --executor-memory 5G --executor-cores 5 --driver-memory 8G --class com.test.Main --packages com.crealytics:spark-excel_2.11:0.14.0 --jars /test/ImpalaJDBC41.jar,/test/TCLIServiceClient.jar /test/test-1.0-SNAPSHOT.jar

内容的提问来源于stack exchange,提问作者Zdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:45:04