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

Google Colab运行PySpark与flask_ngrok出现JSONDecodeError如何解决?

问题解答

错误原因

该错误确实是PySpark与flask_ngrok抢占同一端口导致的。
PySpark启动SparkContext时默认会占用4040端口启动SparkUI服务,而flask_ngrok依赖的ngrok客户端默认会优先使用4040端口返回隧道配置信息。端口被占用后ngrok返回的响应为空,无法解析为合法JSON,因此抛出对应的JSONDecodeError错误。这也能解释为什么停止SparkContext释放4040端口后,flask_ngrok就能正常运行。

解决方案

不需要停止SparkContext,通过调整Spark配置避免端口冲突即可,可选两种方案:

方案1:修改SparkUI默认端口

初始化SparkConf时,将SparkUI的端口改为其他未被占用的端口即可,修改后的PySpark初始化代码如下:

import pyspark
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import os
import findspark

os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-11-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/drive/<<path to curr dir>>/spark-3.1.2-bin-hadoop2.7"
findspark.init()
conf = pyspark.SparkConf().setAppName('appName').setMaster('local') \
       .set('spark.ui.port', '4050') # 将默认4040端口修改为4050或其他闲置端口
sc = pyspark.SparkContext(conf=conf)
spark = SparkSession(sc)
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
df = spark.createDataFrame(books_df)

方案2:禁用SparkUI

如果不需要使用SparkUI功能,可以直接禁用该服务,从根源避免端口占用:

# 仅需要在初始化SparkConf时增加一行配置即可
conf = pyspark.SparkConf().setAppName('appName').setMaster('local') \
       .set('spark.ui.enabled', 'false')

修改完成后无需停止SparkContext,直接运行flask_ngrok相关代码即可正常启动服务,同时可以正常访问之前创建的Spark DataFrame df。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:10