You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Google Dataproc集群处理Excel文件时遭遇java.lang.NoSuchMethodError错误

Dataproc集群读取Excel文件时出现java.lang.NoSuchMethodError错误

在Dataproc集群中读取Excel文件时触发java.lang.NoSuchMethodError,Schema可正常打印,但无法获取实际数据。

错误详情

py4j.protocol.Py4JJavaError: An error occurred while calling o74.showString. : java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps; at com.crealytics.spark.excel.ExcelRelation.buildScan(ExcelRelation.scala:74)

相关代码

from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext
from google.cloud import storage
from google.cloud import bigquery
import pyspark

client = storage.Client()

bucket_name = "test_bucket"

path=f"gs://{bucket_name}/test_file.xlsx"

def make_spark_session(app_name, jars=[]): 
  configuration = (SparkConf()     
            .set("spark.jars", ','.join(jars)))

  spark = SparkSession.builder.appName(app_name) \
    .config(conf=configuration).getOrCreate()
  return spark

app_name = 'test_app'
jars = ['gs://bucket/spark-excel_2.11_uber-0.12.0.jar']

spark = make_spark_session(app_name,jars)
df = spark.read.format("com.crealytics.spark.excel") \
          .option("useHeader","true") \
          .load(path)

df.show(1)

解决方案

这个错误的核心是Scala版本不兼容:你使用的spark-excel_2.11_uber-0.12.0.jar基于Scala 2.11编译,但Dataproc集群(尤其是2.0及以上版本)默认使用Scala 2.12,导致跨版本方法调用失败。

解决步骤:

  1. 确认集群的Scala版本:在集群节点执行spark-submit --version,输出中会显示Scala版本。
  2. 替换对应版本的spark-excel jar包:
    • 如果集群用Scala 2.12,改用spark-excel_2.12_uber-0.12.0.jar(或匹配集群Spark版本的更高兼容版本,比如Spark 3.x对应spark-excel 0.13.x及以上)
  3. 更新代码中的jar路径:将jars = ['gs://bucket/spark-excel_2.11_uber-0.12.0.jar']替换为对应版本的jar存储路径。

额外建议:创建Dataproc集群时,可以通过--properties spark.jars.packages=com.crealytics:spark-excel_2.12:0.13.7(替换为对应版本)的方式自动拉取兼容依赖,避免手动管理jar包版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:30:44