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

PySpark中FP Growth(频繁模式挖掘)执行.fit()报错的解决方法

解决Spark 2.3.0 + Java 9下FP Growth的fit()方法报错问题

问题背景

你运行的是Spark官方的FP Growth示例代码:

from pyspark.ml.fpm import FPGrowth
df = spark.createDataFrame([(0, [1, 2, 5]),(1, [1, 2, 3, 5]),(2, [1, 2])], ["id", "items"])
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)
model.freqItemsets.show()

但调用fit()时抛出了包含java.lang.IllegalArgumentException的栈错误,核心触发点是org.apache.xbean.asm5.ClassReader无法正常处理字节码。

你的环境配置:

  • Spark 2.3.0
  • Java 9

问题根源

Spark 2.3.0的开发周期早于Java 9正式发布,官方并未对Java 9提供支持。它依赖的ASM库版本(asm5)仅能解析Java 8及以下版本的字节码,而Java 9引入了新的字节码格式与模块系统,导致Spark的ClosureCleaner(用于清理闭包的核心工具)在解析类文件时直接报错。


解决方案

方案1:降级Java到Spark 2.3.0支持的版本(推荐)

Spark 2.x系列的官方推荐运行环境是Java 8,这是最稳定、兼容性最好的选择:

  1. 安装Java 8 JDK/JRE
  2. 修改系统环境变量,将JAVA_HOME指向Java 8的安装路径
  3. 重启Spark会话或开发工具,重新运行代码

切换后,示例代码应该能正常输出频繁项集:

+---------+----+
|    items|freq|
+---------+----+
|      [1]|   3|
|      [2]|   3|
|   [1, 2]|   3|
|      [5]|   2|
|   [1, 5]|   2|
|   [2, 5]|   2|
|[1, 2, 5]|   2|
+---------+----+

方案2:升级Spark版本到支持Java 9的版本

如果你必须使用Java 9,可以升级Spark到2.4.0及以上版本(Spark 2.4开始有限支持Java 9)。不过需要注意:

  • Spark 2.4对Java 9的支持存在部分限制,部分边缘功能可能有兼容性问题
  • 若想获得更完善的Java 9+支持,建议直接升级到Spark 3.x系列,但需要确认业务代码是否兼容Spark 3.x的API变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:42