解决PySpark转Pandas时ConnectionRefusedError[WinError10061]错误
解决PySpark转Pandas时的ConnectionRefusedError问题
问题根源
你遇到的ConnectionRefusedError: [WinError 10061],主要是因为手动创建SparkContext和SparkSession导致上下文冲突——新版本Spark中SparkSession会自动管理SparkContext,重复初始化会引发网络连接异常;另外toPandas()需要把分布式数据拉取到Driver节点,若Driver的网络配置或资源不足也会触发该错误。
具体修复方案
1. 移除冗余的SparkContext初始化,统一用SparkSession管理
你的代码同时初始化了SparkContext和SparkSession,这是冲突的核心原因。修改后的代码如下:
from pyspark.sql import SparkSession import pandas as pd # 直接通过SparkSession初始化,内置管理SparkContext spark = SparkSession.builder \ .master("local[1]") \ .appName("test_name") \ .config("spark.driver.host", "127.0.0.1") \ .getOrCreate() # 文件路径 path = "./data/fhvhv_tripdata_2022-10.parquet" # Parquet自带Schema元数据,无需设置header=True(该选项仅适用于CSV文件) data = spark.read.parquet(path) # 转换为Pandas DataFrame pd_df = data.toPandas()
2. 增加Driver内存配置(针对大数据量场景)
如果Parquet文件数据量较大,toPandas()拉取数据时可能因Driver内存不足间接引发连接问题,可在配置中增加内存限制:
spark = SparkSession.builder \ .master("local[1]") \ .appName("test_name") \ .config("spark.driver.host", "127.0.0.1") \ .config("spark.driver.memory", "4g") # 根据本机内存调整,比如4G、8G .getOrCreate()
3. 检查本地网络与端口配置
- 确保本地防火墙未拦截Spark Driver端口,也可手动指定端口:
.config("spark.driver.port", "4040") - 尝试将
127.0.0.1替换为localhost测试连接 - 确认4040端口未被其他程序占用
4. 验证Spark环境兼容性
- 确保PySpark版本与Python版本匹配(如PySpark 3.x对应Python 3.7+)
- 执行
spark.sparkContext.getConf().getAll()查看配置,确认spark.driver.host已正确设置为本地地址
内容的提问来源于stack exchange,提问作者Parksubo
相关产品推荐
相关产品推荐

