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

PySpark中TypeError: 'JavaPackage' object is not callable错误求助

解决PySpark中TypeError: 'JavaPackage' object is not callable错误

核心问题:Java版本不兼容

Spark 3.4.1官方仅支持Java 8和Java 11,你使用的Java 21不在兼容范围内,这是触发该错误的根本原因。

修复步骤

1. 降级Java版本

卸载当前的Java 21,安装Java 11 LTS版本,完成后配置环境变量:

  • 设置JAVA_HOME指向Java 11的安装目录
  • 将Java 11的bin路径添加到系统PATH最前端,确保系统优先调用该版本

2. 修正SparkContext获取方式

代码中直接使用sc但未显式关联SparkSession,容易出现上下文不一致问题,修改为:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("practice").getOrCreate()
sc = spark.sparkContext  # 显式从SparkSession获取SparkContext

3. 检查环境变量配置

  • 确认SPARK_HOME已正确设置,且%SPARK_HOME%\bin已添加到系统PATH
  • 设置PYSPARK_PYTHON环境变量指向你的Python 3.11.5解释器路径(比如C:\anaconda3\envs\spark_latest\python.exe)

4. 修复路径转义问题

Windows路径中的反斜杠需转义,或使用原始字符串避免错误:

data_path = r"pathToFile\TelecomData.csv"  # 原始字符串无需转义反斜杠

代码优化建议

直接用split(",")处理CSV容易因字段含逗号(如带引号的内容)出错,建议使用Spark原生CSV读取API,更稳定可靠:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("practice").getOrCreate()
# 如果CSV有表头,打开header=True后可直接用列名过滤
df = spark.read.csv(r"pathToFile\TelecomData.csv", header=True, inferSchema=True)
filtered_df = df.filter((df["第三列列名"] == 'Y') & (df["第九列列名"] == 'Y'))
filtered_df.show()

# 无表头时用列索引过滤:
# filtered_df = df.filter((df._c3 == 'Y') & (df._c9 == 'Y'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:26:17