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

使用PySpark时遇Py4JJavaError: scala/Product$class类未找到问题求助

Spark读取SAS文件时Scala版本不兼容错误解决

问题详情

运行代码

import pandas as pd
from pyspark.sql import SparkSession

spark = SparkSession.builder.\
config("spark.jars.repositories", "https://repos.spark-packages.org/").\
config("spark.jars.packages", "saurfang:spark-sas7bdat:2.0.0-s_2.11,org.apache.hadoop:hadoop-aws:2.7.0").\
enableHiveSupport().getOrCreate()

df_spark_temp = spark.read.format('com.github.saurfang.sas.spark').load('18-83510-I94-Data-2016/i94_apr16_sub.sas7bdat')
df_spark_temp.limit(5).toPandas().show()

报错信息

py4j.protocol.Py4JJavaError: An error occurred while calling o34.load.
: java.lang.NoClassDefFoundError: scala/Product$class
        at com.github.saurfang.sas.spark.SasRelation.<init>(SasRelation.scala:48)
        at com.github.saurfang.sas.spark.SasRelation$.apply(SasRelation.scala:42)
        at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:50)
        at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:39)
        at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:27)
        at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:350)
        at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:228)
        at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:210)
        at scala.Option.getOrElse(Option.scala:189)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:210)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:185)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
        at py4j.Gateway.invoke(Gateway.java:282)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)
        at py4j.ClientServerConnection.run(ClientServerConnection.java:106)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: scala.Product$class
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 23 more

环境信息

  • Python版本:3.9.6
  • JAVA版本:17.0.4.1
  • PySpark版本:3.3.0
  • pyspark --version输出:
____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.3.0
      /_/
                        
Using Scala version 2.12.15, Java HotSpot(TM) 64-Bit Server VM, 17.0.4.1

用户疑问

  1. 是否需要单独安装Scala,还是通过JAVA设置解决?
  2. pyspark --version显示的Scala版本是否意味着已安装?

解决方案

关于Scala安装的说明

PySpark自带完整的Scala运行环境,pyspark --version显示的Scala 2.12.15是PySpark内置的,不需要单独安装Scala。

报错核心原因

你指定的SAS读取包saurfang:spark-sas7bdat:2.0.0-s_2.11是针对Scala 2.11编译的,而你的PySpark使用的是Scala 2.12,版本不匹配导致JVM找不到对应的Scala类(scala.Product$class)。

具体修复步骤

  1. 更换兼容的spark-sas7bdat版本:选择适配Scala 2.12和Spark 3.x的版本,比如3.0.0-s_2.12
  2. 更新hadoop-aws版本:Spark 3.3建议搭配hadoop-aws:3.3.1,避免版本冲突
  3. 修正代码错误:Pandas DataFrame没有show()方法,改用Spark原生的show()或者打印Pandas DataFrame

修改后的代码

import pandas as pd
from pyspark.sql import SparkSession

spark = SparkSession.builder.\
config("spark.jars.repositories", "https://repos.spark-packages.org/").\
config("spark.jars.packages", "saurfang:spark-sas7bdat:3.0.0-s_2.12,org.apache.hadoop:hadoop-aws:3.3.1").\
enableHiveSupport().getOrCreate()

df_spark_temp = spark.read.format('com.github.saurfang.sas.spark').load('18-83510-I94-Data-2016/i94_apr16_sub.sas7bdat')
# 方案1:用Spark原生show方法
df_spark_temp.limit(5).show()
# 方案2:转Pandas后打印
# print(df_spark_temp.limit(5).toPandas())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:15:36